Mysql 不同于 table 结果行的 UNION 方式

Mysql UNION way to differ from which table result row is

假设我有以下查询。

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

免得说 tables 中有一个相同的城市 NY 会给我:

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

我在 HTML table 中获取这个,有没有办法与 MySQL table 结果行不同,其他然后在 tables 本身中创建另一列,例如列 type

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

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

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

您可以像下面这样在查询中添加列。

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

附加一个带有文字字符串值的额外列作为 table 名称以及现有查询。这将帮助您区分行。

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

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

感谢@Gordon 指出。

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

如果您想包含 table 名称,我建议使用 select distinctunion all:

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