此语句运行很长时间并且不返回任何内容。我做错了什么?
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
答案 0 :(得分:4)
你的陈述只是长时间运行,因为效率很低。
但首先,查询并没有多大意义。以下内容相同:
select *
from supplierdata
where zip is not null
我建议您终止查询并在supplierdata(zip)
上构建索引。这应该会大大提高查询的性能。
实质上,您的查询正在为supplierdata
的每一行运行子查询。这非常昂贵,需要对表进行全表扫描。索引应该解决这个问题。
答案 1 :(得分:1)
你的人数很差,所以你的查询基本上是:
实现相同目标的更简单方法。 选择 算(1) 从 supplierdata s1 哪里 zip不为空
答案 2 :(得分:1)
除了“这没有任何意义”之外:
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说的那样