sql with not exists返回schema,但没有记录

时间:2014-03-03 16:00:59

标签: sql sql-server

有点堆叠,无法弄清楚。想知道你是否能帮忙...... 我想排除以100开始的帐户...

SELECT * 
  FROM Inventory   --returns 300 records
SELECT * 
  FROM Inventory 
 WHERE AccNum LIKE '100%'    --returns 50 records

但是这个会返回架构和NO记录。为什么?我应该得到250条记录......

SELECT * 
  FROM Inventory 
 WHERE NOT EXISTS(SELECT * 
                    FROM Inventory 
                   WHERE AccNum LIKE '100%')

2 个答案:

答案 0 :(得分:5)

让我解释为什么您的查询首先失败,然后显示如何解决它。

这是不能按预期工作的查询:

SELECT *
FROM Inventory
WHERE NOT EXISTS(SELECT * FROM Inventory WHERE AccNum LIKE '100%');

它不返回任何行的原因是where子句。子查询返回50行。因此,它存在。换句话说,此版本的查询将返回表中的所有行或不返回任何行。行与行之间没有任何变化。

解决此问题的一种方法是使用in

SELECT *
FROM Inventory i
WHERE AccNum NOT IN (SELECT AccNum FROM Inventory i2 WHERE AccNum LIKE '100%');

只要AccNum永远不会NULL

,这将有效

当然,更简单的方法就是使用简单的where子句:

SELECT *
FROM inventory
WHERE AccNum NOT LIKE '100%' OR AccNum IS NULL;

答案 1 :(得分:2)

我认为你的意思是:

SELECT * FROM Inventory 
WHERE AccNum not in (SELECT AccNum FROM Inventory WHERE AccNum LIKE '100%')

在您原来的'SELECT * FROM Inventory WHERE AccNum LIKE'100%''将始终返回记录,因此NOT EXISTS将始终失败

相关问题