我有一个带有ID和代码条目的表。代码是唯一的,但id是主键。
ID Code
1 ABC1234T
2 ABC6789Y
3 ABC9999A
4 QAZ1234G
5 QAZ6574U
6 QAZ9999A
7 TRE1234Y
8 REW1234U
我需要查找没有* 999A条目的前缀(前3个字母)。在给定的示例中,它将是TRE和REW。我的查询很慢,需要大约17秒钟才能运行约9000条记录。我了解这主要是因为我正在使用NOT IN和子查询。谁能给我一些如何优化它的想法?
SELECT distinct LEFT(newcode, 3) as codeprefix FROM diatcode where (LEFT(newcode, 3)) NOT in (select DISTINCT LEFT(newcode, 3) from diatcode where newcode like '___9999A' ) order by newcode
您可以进行左连接,然后根据空值进行过滤。它避免了子查询,但是我不确定这是最快的解决方案。
SELECT DISTINCT LEFT(d1.newcode, 3) as codeprefix
FROM diatcode d1
LEFT JOIN (SELECT DISTINCT LEFT(d2.newcode, 3) as codeprefix
FROM diatcode d2
WHERE d2.newcode LIKE '___9999A') t2
ON LEFT(d1.newcode, 3)=t2.codeprefix
WHERE t2.codeprefix IS NULL;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句