如何在仅有唯一ID

时间:2016-11-16 16:46:25

标签: sql

我有两张桌子

表1:

color_id | label
---------|------
2        | 0
3        | 0
2        | 0
1        | 0
4        | 1
4        | 1
5        | 0

表2:

color_id
--------
2
1
4

我想要一个查询,它只是给出了表2中

中出现的color_ids的结果

所以,我写道:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.color_id = table2.color_id
WHERE table2.color_id IS NOT NULL

然而,上面也给出了重复。我的意思是

2  | 0
2  | 0
1  | 0
4  | 1
4  | 1

我不希望结果中有重复项。我只想要独特的物品。

6 个答案:

答案 0 :(得分:1)

  

我想要一个查询,它只是给出了表2中

中出现的color_ids的结果

所以,在这种情况下你不应该使用LEFT JOIN

SELECT DISTINCT a.color_id, a.label
FROM table_1 a JOIN table_2 b
ON a.color_id = b.color_id

答案 1 :(得分:0)

尝试以下查询

SELECT DISTINCT color_id
FROM table_1 T1
WHERE EXISTS (SELECT 1 FROM table_2 T2 where T1.color_id = T2.color_id)

答案 2 :(得分:0)

使用内部联接和distinct子句:

SELECT DISTINCT table1.color_id, table1.label
FROM table1
INNER JOIN table2
ON table1.color_id = table2.color_id

答案 3 :(得分:0)

您正在寻找的是INNER JOIN和

SELECT distinct table1.color_id, tabl1.label
FROM table1
INNER JOIN table2 ON table1.color_id = table2.color_id

这消除了table1中没有表2和重复行的任何项目。

答案 4 :(得分:0)

将关键字Left(或Rightfull)添加到连接说明符后,您可以将连接设为外部连接。这意味着您从连接的一侧获取所有行,并且只从另一侧获得匹配的那些行。如果您只想要table_1 color_id所在的table_2行,那么您需要一个内部加入,通过编写inner join或只需撰写join,而不是leftrightfull

要消除重复项,请将关键字distinct添加到select子句...

Select distinct color_id, label
From table1 t1
  join table2 t2
     on t2.color_id = t1.color_id

答案 5 :(得分:0)

原因是你使用了Left Join,这将保留table1中的所有obs。 试试这个:

SELECT table1。* FROM table1 Inner JOIN table2 ON table1.color_id = table2.color_id

这应该可行,因为实际上所有table2 obs都在table1中。更严重的是,如果table2的obs不在table1中并且您确实希望保留它们,请将内部联接替换为右联接