You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更规范的SQL查询所有产品均跨国发货的公司

筛选所有产品均跨国发货的公司

现有MySQL数据库中的sales表数据如下:

company     manufactured    shipped
Mercedes    Germany         United States
Mercedes    Germany         Germany
Mercedes    Germany         United States
Toyota      Japan           Canada
Toyota      Japan           England
Audi        Germany         United States
Audi        Germany         France
Audi        Germany         Canada
Tesla       United States   Mexico
Tesla       United States   Canada
Tesla       United States   United States

需求:筛选出所有产品均为跨国发货的公司,即该公司的每一条记录中manufactured列与shipped列的值都不相同。

期望结果:

company
Toyota
Audi

原实现方案

用户当前的可行但不够优雅的实现代码:

WITH temp_table AS (
    SELECT
      s.company AS company
      , SUM(CASE
               WHEN s.manufactured != s.shipped THEN 1
               ELSE 0
            END
           ) AS count_international
      , COUNT(s.company) AS total_within_company
    FROM
      sales s
    GROUP BY
      s.company
)
SELECT
   company
FROM
   temp_table
WHERE count_international = total_within_company

更简洁规范的优化方案

以下两种方案均符合SQL规范,逻辑直观且无需额外临时表:

方案1:使用HAVING子句直接过滤

通过统计同国发货的记录数,要求该数值为0即可:

SELECT company
FROM sales
GROUP BY company
HAVING COUNT(CASE WHEN manufactured = shipped THEN 1 END) = 0;

MySQL中可进一步简化(布尔表达式会返回1/0,直接求和判断):

SELECT company
FROM sales
GROUP BY company
HAVING SUM(manufactured = shipped) = 0;

方案2:使用NOT EXISTS子查询

从公司维度出发,排除存在同国发货记录的公司:

SELECT DISTINCT s1.company
FROM sales s1
WHERE NOT EXISTS (
    SELECT 1
    FROM sales s2
    WHERE s2.company = s1.company
      AND s2.manufactured = s2.shipped
);

内容的提问来源于stack exchange,提问作者equanimity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:10:33