该语句运行了很长时间并且不返回任何内容。我究竟做错了什么?
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
您的语句只是运行了很长时间,因为它效率低下。
但是,首先,该查询实际上没有意义。以下将是等效的:
select *
from supplierdata
where zip is not null
我建议您终止查询并在supplierdata(zip)
. 这应该会大大提高查询的性能。
本质上,您的查询正在为supplierdata
. 这是非常昂贵的,需要对表进行全表扫描。索引应该解决这个问题。
除了“这没有任何意义”:
select *
from supplierdata as s1
where s1.zip IN
(select zip from supplierdata as s2 where s2.zip between 200 and 300);
它相当于
select *
from supplierdata as s1
where s1.zip
between 200 and 300;
等等......只是没有任何意义......如果你解释你试图完成的事情应该会更好;)
或任何不引用父查询的条件;你的循环不是无限的,它只是很长,因为首先它会逐行运行,就像@Nix 说的那样
你的人数很差,所以你的查询基本上是:
实现相同目标的更简单方法。从供应商数据 s1 中选择 count(1),其中 zip 不为空