【问题标题】: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 的查询中有一些无关项:
不需要GROUP BY 来展平结果,因为UNION 在选择所有列时自然会这样做。
同样,HAVING 也不需要。
UNION SELECT 查询中的列别名将被 MySQL 忽略,因为第一个 SELECT 列表确定结果的列名。 UNION 只需要 (a) 所有 SELECT 语句中的列数相同,以及 (b) 对应列的兼容数据类型 - 相同或可隐式转换。
括号也不是必需的,但如果它使查询对您更具可读性,则应包含它们。
所以你真正需要的是以下内容:
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