从多个具有来源的相同表中选择

时间:2018-07-02 10:53:54

标签: mysql

我要归档的是从相似的表中获取数据(列结构相同),而且还返回列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;

3 个答案:

答案 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