代码之家  ›  专栏  ›  技术社区  ›  luckydonald

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

  •  0
  • luckydonald  · 技术社区  · 6 年前

    我试图存档的是从相似的表中获取数据(列结构相同),但同时返回一列 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 回复  |  直到 6 年前
        1
  •  0
  •   luckydonald    6 年前

    如果您试图从这两个表中 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 语句与所选表不同,并添加一列 表格来源 结果,这样您可以稍后识别它。

    当需要包含重复值时,可以使用 UNION ALL 而不是 工会 :

    的默认行为 工会 是否从结果中删除重复的行。可选 DISTINCT 关键字除了默认值外没有其他效果,因为它还指定了重复行删除。与可选的 ALL 关键字,不会发生重复行删除,结果包括所有 选择 声明。

    但是,在上面的例子中,我们向子查询添加了一个标签字段,只要标签不同,只有在源表中已经存在重复的行时,我们才能遇到重复的行。 如果有一个唯一的非空列(如自动递增 id 通常)这是不可能发生的。

        2
  •  1
  •   phoniq    6 年前

    当需要所有值时,使用union all

    语句联合使不同

    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`
    
        3
  •  0
  •   luckydonald    6 年前

    将此答案编辑为 the accepted answer above .