我感到很奇怪,因为其他所有答案都说它有效,但我无法得到正确的结果:(
table A: id_num, name<br>
table B: id_num
table A has index on name, but not unique. id_num is unique in this table.<br>
table B has index on id_num, but not unique.
我想获得表A中的名字,但不在表B中。
这不起作用:
**SELECT a.name FROM a
LEFT JOIN b ON (a.id_num = b.id_num)
WHERE b.id_numb IS NULL**
表b中的返回名称(有些不是)。
这也不起作用:
**SELECT distinct(a.name)
FROM a where a.id_num
not in (select distinct(b.id_num) from b )**
当SQL说NOT IN时,我无法理解a.names如何返回表B中的人。 我错过了什么?
感谢
答案 0 :(得分:0)
右边,left join
应该有效。以及in
。
这是一个示例。因此,您可能希望发布并显示表格架构和数据,以便更加公正地解决您的问题。如果您可以在SQLFIDDLE上创建表并显示引用,那么最好。 ;)
以下是 SAMPLE : -
样本表: TAB1:
COL1 COL2
1 john
2 tim
3 jack
4 rose
TAB2:
COL3 COL4
1 2
2 3
3 5
4 5
5 2
查询:
select * from tab1
where col1 not in
(select distinct col4 from tab2)
;
结果:
COL1 COL2
1 john
4 rose
OP的表格数据:
COL1 COL2
1 john
2 tim
3 jack
4 rose
5 john
6 john
COL3 COL4
1 2
2 3
3 5
4 5
5 2
6 6
查询:如果您不想要任何重复的名称
select t.col1, t.col2
from tab1 t
join
(select t1.col2, count(*) as counts
from tab1 t1
group by t1.col2
having count(*) = 1) x
on t.col2 = x.col2
where t.col1 not in
(select distinct col4 from tab2)
;
结果:这是Rose,唯一没有重复且在tab2中不存在的记录
COL1 COL2
4 rose
答案 1 :(得分:0)
试试这个
select t1.name from table1 t1
where t1.name not in
(select t2.name from table2 t2 )
修改强>
如果您的第二张表中只有id_num
,那么请点击