我有两张桌子
表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
我不希望结果中有重复项。我只想要独特的物品。
答案 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
(或Right
或full
)添加到连接说明符后,您可以将连接设为外部连接。这意味着您从连接的一侧获取所有行,并且只从另一侧获得匹配的那些行。如果您只想要table_1
color_id
所在的table_2
行,那么您需要一个内部加入,通过编写inner join
或只需撰写join
,而不是left
,right
或full
。
要消除重复项,请将关键字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中并且您确实希望保留它们,请将内部联接替换为右联接。