简单的SQL操作 - 连接两个具有相同列且没有主键/外键的表

时间:2013-05-28 14:49:35

标签: mysql sql join primary-key unique

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

2 个答案:

答案 0 :(得分:1)

您可以使用union语句:

(
    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

答案 1 :(得分:1)

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

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

  2. 同样,也不需要HAVING

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

  4. 也不需要括号,但如果它使查询更具可读性,则应包括它们。

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

    SELECT column1 AS column1, column2 AS column2, column3 AS column3
    FROM table1
    UNION SELECT column1, column2, column3
    FROM table2
    
相关问题