2024-11-23 08:02:37
可以考虑换成not exists或minus(except)
--not exists
SELECT name FROM test1 a
WHERE NOT EXISTS (SELECT 1 FROM test2 b WHERE a.NAME=b.NAME and b.NAME<>'admin')
--minus
SELECT name FROM test1 a
minus
SELECT DISTINCT NAME FROM test2 WHERE NAME<>'admin'
效率方面,一般来说not exists和minus要比not in强很多,但是也要具体情况具体分析。
可以参考这里:
通过一个例子,对比几种方法的效率
except会去重复,不需要DISTINCT吗?
except是第一张表减去第二张表。你第一张表里name不是唯一的吗,所以不用distinct。第二张表是否distinct都不影响结果。
SELECT name FROM test1 a
minus
SELECT DISTINCT NAME FROM test2 WHERE NAME'admin'
这个查询中DISTINCT无意义,可以去掉.是吗(test2 有name字段,不唯一)
可以去掉
2024-11-23 08:43:35
except会去重复,不需要DISTINCT吗?
不需要DISTINCT了
2024-11-23 08:43:02
except会去重复,不需要DISTINCT吗?
用exists 或者not exists时不需要DISTINCT