【问题标题】:Simple SQL operation - Joining two tables with identical columns and no primary/foreign keys简单的 SQL 操作 - 连接两个具有相同列且没有主键/外键的表
【发布时间】:2013-05-28 14:49:35
【问题描述】:

我有两个具有相同 (6) 列和不同条目的表。我想获得一个具有相同列的“主”表,包括表 A 和 B 中的每个唯一条目。两个表上都不存在主键或外键,并且条目的“唯一性”由每个表确定6 个字段与另一个条目相同。换句话说,如果条目 x 的第 1 列等于条目 y 的第 1 列,并且所有剩余的列也相等,则这两个条目被认为是非唯一的,无论它们存在于同一个表中还是不同的表中。我已经研究并找到了类似的解决方案,但没有一个能完全解决这个问题。有什么想法吗?

【问题讨论】:

    标签: mysql sql join primary-key unique


    【解决方案1】:

    UNION 绝对是这里需要的,但@PhilCross 的查询中有一些无关项:

    1. 不需要GROUP BY 来展平结果,因为UNION 在选择所有列时自然会这样做。

    2. 同样,HAVING 也不需要。

    3. UNION SELECT 查询中的列别名将被 MySQL 忽略,因为第一个 SELECT 列表确定结果的列名。 UNION 只需要 (a) 所有 SELECT 语句中的列数相同,以及 (b) 对应列的兼容数据类型 - 相同或可隐式转换。

    4. 括号也不是必需的,但如果它使查询对您更具可读性,则应包含它们。

    所以你真正需要的是以下内容:

    SELECT column1 AS column1, column2 AS column2, column3 AS column3
    FROM table1
    UNION SELECT column1, column2, column3
    FROM table2
    

    【讨论】:

    • 感谢您澄清之前的答案,我相信我会同意的。
    【解决方案2】:

    你可以只使用联合声明:

    (
        SELECT column1 AS column1, column2 AS column2, column3 AS column3  
        FROM table1 
    ) UNION (
        SELECT column1 AS column1, column2 AS column2, column3 AS column3 
        FROM table2 
    )
    GROUP BY column1, column2, column3 
    HAVING COUNT(column1, column2, column3)>0
    

    【讨论】:

    • 感谢您的回复!
    猜你喜欢
    • 2020-11-26
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2017-01-25
    • 2015-05-06
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多