【发布时间】:2012-09-03 09:18:42
【问题描述】:
我有一个 mysql 表,其中包含跨多个表的大量数据。因此,为了得到这一切,我认为最好的办法是使用 UNION 子句,但是我也想知道结果来自哪个表,因为有些表有多个值,有些是空的。
以下 sql 似乎不起作用,但我看不出有什么问题。
(SELECT *, `2` AS 'cat' from `2` where `recid` = 'cneta0ld00ah')
UNION
(SELECT *, `3` AS 'cat' from `3` where `recid` = 'cneta0ld00ah')
UNION
(SELECT *, `4` AS 'cat' from `4` where `recid` = 'cneta0ld00ah')
UNION
(SELECT *, `5` AS 'cat' from `5` where `recid` = 'cneta0ld00ah')
所有类似于以下内容的表都被命名为 1、2、3、4 等。
recid | item
-------------------------
cneta0ld00ah | 1
cneta0ld00ab | 1
cneta0ld00ad | 3
我无法更改表的名称,因为它是从我们试图转换和提取数据的非常旧的数据库中导入的。
如果我在没有 'table-name' AS 'cat' 的情况下运行它,那么它运行良好,一旦我尝试添加表名,它就会抛出一个错误提示
Unknown column '2' in 'field list'
似乎认为 2 是列名?
【问题讨论】:
-
你使用
UNION而不是UNION ALL有什么原因吗? -
呃,不,只是认为 UNION 可能是要走的路。刚刚注意到 UNION 删除了重复的行,它可能每个表都会返回一个 1 的项目,我想知道这是否只会返回 1 行。 ALL 返回所有行?还有其他使用 ALL 的理由吗?
-
UNION需要额外的时间来删除重复项。如果您只需要合并没有重复的数据,UNION ALL会更快,因为它不会删除重复。看我的回答。