我正在使用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,并将其替换为嵌套查询,则查询将返回正确的结果。我不确定我到底做错了什么。
答案 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!