mysql>获取表名和select输出

3npbholx  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(243)

我们有一些结构非常相似的遗留表。这些表是分开的,因为相同信息的格式略有不同,这取决于从何处获取信息的源[不要触发模式继承器;)]。我们一直在查询中使用union。
例如:

SELECT a, b, c, FROM Table_1 WHERE …
UNION
SELECT a, b, c, FROM Table_2 WHERE …
UNION
SELECT a, b, c, FROM Table_3 WHERE …

这种混乱的安排一直在起作用,但我们想知道我们输出的信息来自哪个表。有什么办法可以实现吗?

goqiplq2

goqiplq21#

你可以做:

SELECT 'Table_1' as source, a, b, c, FROM Table_1 WHERE …
UNION ALL
SELECT 'Table_2', a, b, c, FROM Table_2 WHERE …
UNION ALL
SELECT 'Table_3', a, b, c, FROM Table_3 WHERE …

别忘了使用 UNION ALL 而不是 UNION . 它具有更好的性能,并且不删除行。

pinkon5k

pinkon5k2#

只需向每个包含表名的子查询添加一列:

SELECT 'Table_1' tablename, a, b, c, FROM Table_1 WHERE ...
UNION ALL
SELECT 'Table_2', a, b, c, FROM Table_2 WHERE ...
UNION ALL
SELECT 'Table_3', a, b, c, FROM Table_3 WHERE ...

请注意,我更改了 UNION s到 UNION ALL s、 因为添加此列基本上会破坏 UNION 提供。

相关问题