在联合中的两个表之间仅选择一个相同的行(特定)

时间:2013-08-01 11:48:38

标签: mysql union

我有两张相同的桌子

让我们称之为t1和t2

我希望显示来自它们的数据但它们可能有相同的行(假设这些行具有相同的id

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

所以

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

但我该如何处理重复?

3 个答案:

答案 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(而对于SELECTSELECT 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 . . .
                 )