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

MySQL中SELECT DISTINCT两表城市列与UNION合并城市查询的区别是什么

两条MySQL查询语句的核心区别

两条语句的实际作用

第一条语句

SELECT DISTINCT S.City , C.City
FROM Suppliers S,Customers C;

这是没有加连接条件的隐式交叉连接,会先对Suppliers和Customers两个表做笛卡尔积:把供应商表的每一行和客户表的每一行两两拼接,再对拼接后得到的「供应商城市+客户城市」组合去重,最终返回两列数据,分别对应供应商的城市、客户的城市。

第二条语句

SELECT City FROM Suppliers
UNION 
SELECT City FROM Customers;

这是结果集的垂直合并操作,UNION会把两个单字段查询的结果按行拼接,并且自动对合并后的所有城市值去重,最终返回单列的城市列表,内容是两个表中出现过的所有不重复的城市。

核心差异点

  • 结果结构不同:第一条返回2列数据,第二条只返回1列数据
  • 逻辑本质不同:第一条是两个表的水平拼接,求不重复的城市对组合;第二条是两个结果集的上下拼接,求两个表城市的并集
  • 结果量级差异极大:假设供应商表有M个不重复城市,客户表有N个不重复城市,第一条最多返回M*N条结果,第二条最多返回M+N条结果
  • 去重规则不同:第一条是对两个城市的组合去重,只有两个城市同时和已有行重复才会被过滤;第二条是对单个城市值去重,只要值重复就会被过滤

举个简单示例:
假设Suppliers的城市有「上海、北京、广州」3个不重复值,Customers的城市有「北京、广州、深圳」3个不重复值

第一条的输出是9组不重复的城市对:(上海,北京)、(上海,广州)、(上海,深圳)、(北京,北京)、(北京,广州)...共9条2列数据
第二条的输出是4个不重复的城市:上海、北京、广州、深圳,共4条1列数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03