该语句运行很长时间并且不返回任何内容。我究竟做错了什么?SQL语句无限运行
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
该语句运行很长时间并且不返回任何内容。我究竟做错了什么?SQL语句无限运行
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
的每一行运行子查询。这非常昂贵,需要对表格进行全表扫描。索引应该解决这个问题。
你正在做一个非常贫穷的男人的,所以你的查询将基本上是:
更简单的方法来达到同样的。 选择 计数(1) 从 supplierdata S1 其中 拉链不为空
我只想比较1条记录和其他所有条目,反之亦然。 – 2013-03-26 13:41:11
除了 “这个不要让任何意义”:
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所说
你的回答是对的,但我不想使用'之间'。 – 2013-03-26 13:40:30
你想完成什么...我可以帮你;) – Hackerman 2013-03-26 13:44:51
这条SQL语句没有任何意义。你想达到什么目的? – 2013-03-26 13:26:00
我只想知道sql语句是如何进入无限循环以及处理多长时间的。 – 2013-03-26 13:35:30
嗨@NimeshSoni,迟早这个问题将被关闭。为了提出更好的问题,你也可以解释你想要达到的目标。这个SQL没有任何意义。 – Ramesh 2013-03-26 15:48:50