0

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

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.

我想获取不在表 B 中的表 A 名称。

这不起作用:

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

谢谢

4

2 回答 2

0

按理说,left join应该工作。以及in

这是一个示例。因此,您可能希望发布并显示您的表架构和数据,以便更公正地解决您的问题。最好只在 SQLFIDDLE 上创建表并显示参考。;)

这里只是样本:-

示例表:tab1:

   COL1     COL2
    1       john
    2       tim
    3       jack
    4       rose

选项卡2:

   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中没有名称字段。如果 OP 最初提供了预期的结果,也非常推荐。

* SQLFIDDLE 参考

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
于 2012-12-20T23:10:26.553 回答
0

尝试这个

    select t1.name from table1 t1
     where t1.name not in 
               (select t2.name from table2 t2 )

看看 DEMO SQLFIDDLE

编辑:

如果您只有id_num第二张桌子,那么请看

这个演示 SQLFIDDLE

于 2012-12-20T23:19:33.127 回答