我要归档的是从相似的表中获取数据(列结构相同),而且还返回列table_origin
以便以后标识该表。
我试图使类似的东西在MySQL中工作,但到目前为止没有成功。
大概是这样(不起作用)的例子:
SELECT * FROM (
SELECT *, 44 as table_origin FROM `CustomerData_44`
) AS a FULL OUTER JOIN (
SELECT *, 58 as table_origin FROM `CustomerData_58`
) AS b ON true;
答案 0 :(得分:1)
当需要所有值时,请使用UNION ALL
声明UNION使DISTINCT
https://dev.mysql.com/doc/refman/5.5/en/union.html
What is the difference between UNION and UNION ALL?
SELECT *, 44 as table_origin FROM `CustomerData_44`
UNION ALL
SELECT *, 58 as table_origin FROM `CustomerData_58`
答案 1 :(得分:0)
如果您尝试使用table_origin
作为标识符列从这两个表中获取行,则可以尝试使用UNION
of multiple SELECT statements而不是使用联接。
SELECT *, 44 as table_origin FROM `CustomerData_44`
UNION
SELECT *, 58 as table_origin FROM `CustomerData_58`
每个SELECT
语句因要从中选择的表而异,并在结果中添加了列table_origin
,因此您以后可以识别它。
当需要包含重复值时,可以使用UNION ALL
代替UNION
:
UNION
的默认行为是从结果中删除重复的行。可选的DISTINCT
关键字除了默认关键字外没有其他作用,因为它还指定了重复行删除。使用可选的ALL
关键字时,不会发生重复行删除,并且结果包括来自所有SELECT
语句的所有匹配行。
但是,在上述情况下,我们将标签字段添加到子查询中,并且只要标签不同,我们就只能在源表中已经存在重复项的情况下遇到重复行。
如果您有唯一的非null列(例如经常自动递增id
),则不会发生这种情况。
答案 2 :(得分:0)
将此答案编辑为the accepted answer above。