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 distinct
和union 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 方式与哪个表结果行不同的主要内容,如果未能解决你的问题,请参考以下文章