嵌套SELECT与IN

时间:2014-06-15 14:04:05

标签: mysql

我正在使用Mysql并尝试将数据从一个数据库迁移到另一个数据库。我之前没有使用过数据库。

这个查询给了我近300个结果

select distinct internal_id from ratingsapp.hotel03

但是这个没有结果也没有错误:

select restname from City.resturant where restid not in 
    (select distinct internal_id from ratingsapp.hotel03)

现在,如果我从hotel03表中手动选择几个internal_id,并将其替换为嵌套查询,则查询将返回正确的结果。我不确定我到底做错了什么。

2 个答案:

答案 0 :(得分:1)

当其中一个值为NULL时,通常会发生这种情况。所以这可能有用:

select restname
from City.resturant
where restid not in (select distinct internal_id from ratingsapp.hotel03 where internal_id is not null);

编写此查询的另一种方法是使用not exists

select restname
from City.resturant r
where not exists (select 1
                  from ratingsapp.hotel03 h
                  where h.internal_id = r.restid
                 );

这种方式有效,NULL无需直接检查即可正确处理。这是NOT EXISTS优于NOT IN的原因之一。

答案 1 :(得分:0)

您确定不是因为restid的所有City.restaurant都在internal_id的{​​{1}}中吗?你说你手动选择了一些这些ID并且有结果,但请检查:

ratingsapp.hotel03

然后您的查询将不会返回任何内容,因为所有distinct City.restaurant.restid: 1, 2, 3, 4, 5 distinct ratingsapp.hotel03.internal_id: 1, 2, 3, 4, 5 restid not in。但是,如果您从internal_id中选择几个ID ,例如:

ratingsapp.hotel03.internal_id

然后,您将拥有select restname from City.resturant where restid not in (1, 2, 3) 的所有City.restaurant为4或5!