Mysql UNION 方式与哪个表结果行不同

Posted

技术标签:

【中文标题】Mysql UNION 方式与哪个表结果行不同【英文标题】:Mysql UNION way to differ from which table result row is 【发布时间】:2020-06-01 23:37:26 【问题描述】:

假设我有以下查询。

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

免得说两张桌子上都有同一个城市纽约女巫会给我:

| City     |
| -------- | 
| NY       |
| NY       |

我在 html 表中获取它,有没有办法与女巫 mysql 表结果行不同,然后在表本身中创建另一列,例如列 type

也许可以在查询中将某些内容附加到结果集本身?

【问题讨论】:

您的查询无法返回该结果。您正在使用 union 删除重复项 【参考方案1】:

我不明白你的结果,因为union 删除了重复项,所以它应该只产生一行。

如果你想包含表名,我建议使用select distinctunion all

SELECT DISTINCT 'customers' as type, City FROM Customers
UNION ALL
SELECT DISTINCT 'suppliers' as type, City FROM Suppliers
ORDER BY City;

【讨论】:

你是对的,对不起,我厌倦了简化它,查询要大得多,并且某些列,如 id 和 case numbers,搜索词是相同的。我得到了正确的结果。但是例子是错误的。我会接受这是最正确的评论,这样其他阅读者也不会感到困惑。【参考方案2】:

附加一个额外的列,其中包含文字字符串值作为表名以及现有查询。这将帮助您区分行。

SELECT 'Customers' as Type, City FROM Customers
UNION ALL
SELECT 'Suppliers' as Type, City FROM Suppliers
ORDER BY City;

更新: UNION 删除重复的行。因此,如果您的表在 City 列中具有相同的值,它将返回唯一的行。你必须使用UNION ALL。这将返回所有行并将字符串文字附加为类型列将帮助您区分行。

感谢@Gordon 指出。

【讨论】:

【参考方案3】:

添加一个包含文字值的额外列,具体取决于它是哪个子查询。

SELECT 'Customers' AS type, City
FROM Customers
UNION
SELECT 'Suppliers' AS type, City
FROM Suppliers
ORDER BY City, type

【讨论】:

【参考方案4】:

您可以在查询中添加列,如下所示。

SELECT city, 'c' as type FROM Customers
UNION
SELECT city, 's' as type FROM Suppliers
ORDER BY city, type;

【讨论】:

以上是关于Mysql UNION 方式与哪个表结果行不同的主要内容,如果未能解决你的问题,请参考以下文章

mysql中union与union all的区别

mysql中的联合查询

MySQL:在没有 JOIN 或 UNION 的情况下合并两个不同的表

MySQL ----- 组合查询 UNION(十五)

MySQL ----- 组合查询 UNION(十五)

mysql数据库基础