2016-11-16 50 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中,並且您想保留它們,請將內部連接右邊連接