我有两张相同的桌子
让我们称他们为 t1 和 t2
我想显示他们两个的数据但他们可能有相同的行(假设这些行有相同的id
)
在这种情况下,我只想从表 1 中获取该行,而忽略第二个表中的行。
所以
SELECT column_name(s) FROM t1 UNION SELECT column_name(s) FROM t2
但我应该如何处理重复?
如果要从 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;
顺便说一句,对于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可能有助于提供更好的答案。
你是这个意思 ?
select column1 , column2 from (
SELECT column1 , column2 FROM t1
UNION
SELECT column1 , column2 FROM t2
)t
group by column1
您将在这里有不同的 column1
Here is one way:
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 . . .
)