Mysql UNION与表结果行不同的方式

问题描述 投票:0回答:4

假设我有以下查询。

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

至少要说在两个桌子上都有一个纽约市,女巫会给我的:

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

我正在HTML表中获取此信息,有没有办法与MySQL表结果行的来源不同,然后在表本身中创建另一列,例如列type

也许可以在查询结果本身中添加一些内容?

mysql sql database union union-all
4个回答
2
投票

我不明白您的结果,因为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;

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指出来。


0
投票

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

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

0
投票

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

SELECT city, 'c' as type FROM Customers
UNION
SELECT city, 's'  FROM Suppliers
ORDER BY city, type;
© www.soinside.com 2019 - 2024. All rights reserved.