我有两张相同的桌子
让我们称之为t1和t2
我希望显示来自它们的数据但它们可能有相同的行(假设这些行具有相同的id
)
在这种情况下,我只想从表1中获取行并忽略第二个表中的行。
所以
SELECT column_name(s) FROM t1 UNION SELECT column_name(s) FROM t2
但我该如何处理重复?
答案 0 :(得分:1)
select column1 , column2 from (
SELECT column1 , column2 FROM t1
UNION
SELECT column1 , column2 FROM t2
)t
group by column1
你将在这里有不同的column1
答案 1 :(得分:1)
如果要从SELECT结果集中删除重复项,可以将DISTINCT
子句与子查询一起使用
SELECT DISTINCT * FROM (SELECT value FROM t1 UNION SELECT value FROM t2) AS S
或者更好的是,您可以使用UNION DISTINCT
语法:
SELECT value FROM t1 UNION DISTINCT SELECT value FROM t2;
BTW,对于UNION
,默认值为UNION DISTINCT
(而对于SELECT
,SELECT ALL
是默认值),因此可以将其重写为:
-- without specifier UNION is implicitly DISTINCT
SELECT value FROM t1 UNION SELECT value FROM t2;
...这实际上是您提出的查询。这有什么问题?它适用于我的测试集:http://sqlfiddle.com/#!2/d4812/1
使用实际表格内容的sqlfeedle可能有助于提供更好的答案。
答案 2 :(得分:0)
这是一种方式:
SELECT column_name(s)
FROM t1
UNION
SELECT column_name(s)
FROM t2
where not exists (select 1
from t1
where t1.col1 = t2.col1 and t1.col2 = t2.col2 and . . .
)