2016-11-16 86 views
0

我有两个表如何左连接两个表上只是唯一的ID

表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_id的结果

所以,我写道:

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 

我不想在结果中出现重复。我只想要独特的物品。

回答

0

当您添加关键字Left(或Rightfull)为连接符,你让加入一个加入。这意味着您可以从连接的一侧获取所有行,并且只会从匹配的另一侧获得所有行。如果只想从table_1行,其中color_idtable_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 
0

尝试下面的查询

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

我想要一个查询,只是给我结果存在于表2

所以color_ids,你不应该在此使用LEFT JOIN case:

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

使用内部连接和独特的子句:

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

你所寻找的是一个INNER JOIN与

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

结合这消除了在表1的任何项目不存在于表2和重复行。

0

的,其原因是你用左连接,这将保证所有OB table1中。 试试这个:

选择table1 * FROM表1 INNER JOIN表2 ON table1.color_id = table2.color_id

这应该作为作品其实所有表2的OB表1。更严重的是,如果table2有obs不在table1中,并且您想保留它们,请将内部连接右边连接