1

我有两张相同的桌子

让我们称他们为 t1 和 t2

我想显示他们两个的数据但他们可能有相同的行(假设这些行有相同的id

在这种情况下,我只想从表 1 中获取该行,而忽略第二个表中的行。

所以

SELECT column_name(s) FROM t1 UNION SELECT column_name(s) FROM t2 

但我应该如何处理重复?

4

3 回答 3

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;

顺便说一句,对于UNION默认值是UNION DISTINCT(而对于SELECTSELECT ALL是默认值),所以这可以重写为:

-- without specifier UNION is implicitly DISTINCT
SELECT value FROM t1 UNION SELECT value FROM t2;

...这实际上是您提出的查询。那有什么问题?它适用于我的测试集:http ://sqlfiddle.com/#!2/d4812/1


也许带有实际表格内容的sqlfeedle可能有助于提供更好的答案。

于 2013-08-01T11:57:54.060 回答
1

你是这个意思 ?

      select column1 , column2 from (
           SELECT column1 , column2 FROM t1 
           UNION 
           SELECT column1 , column2 FROM t2 
       )t
       group by column1

您将在这里有不同的 column1

于 2013-08-01T11:51:05.190 回答
0

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 . . .
                 )
于 2013-08-01T11:52:31.070 回答