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

s4chpxco  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(284)

我试图归档的是从类似的表中获取数据(列结构相同),但也返回一列 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;
31moq8wy

31moq8wy1#

当需要所有值时,请使用union all
声明联合使不同
https://dev.mysql.com/doc/refman/5.5/en/union.html
联合和全体联合有什么区别?

SELECT *, 44 as table_origin FROM `CustomerData_44`
UNION ALL
SELECT *, 58 as table_origin FROM `CustomerData_58`
4urapxun

4urapxun2#

如果您试图用 table_origin 作为标识符列,然后可以尝试 UNION 多个select语句而不是使用join。

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 声明。
但是,在上面的例子中,我们向子查询添加了一个label字段,只要标签不同,我们就只能在源表中已经存在重复行的情况下遇到重复行。如果您有一个唯一的非空列(如自动递增 id 通常)这是不可能发生的。

相关问题