可以考虑换成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强很多,但是也要具体情况具体分析。
可以参考这里:http://blog.csdn.net/msg_java2011/article/details/6565198
通过一个例子,对比几种方法的效率
还要注意是在哪一种数据库管理系统中,有些就不支持minus,不过not exists应该都支持。
select name from test1 a
where not exists (select * from test2 b where b.name<>'admin' and b.name = a.name)