left join not working - 获取不在其他表中的记录

时间:2012-12-20 22:58:10

标签: mysql join

我感到很奇怪,因为其他所有答案都说它有效,但我无法得到正确的结果:(

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中的人。 我错过了什么?

感谢

2 个答案:

答案 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的更新评论和表格结构

  • OP提到表tab1将有多个同名记录。根据他原来的表格设计,表格tab2中有 NO NAME 字段。如果OP最初提供了预期的结果,那么也非常推荐。

* SQLFIDDLE Reference

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 )

查看DEMO SQLFIDDLE

修改

如果您的第二张表中只有id_num,那么请点击

THIS DEMO SQLFIDDLE