我希望我的SQL请求占用一些行,但是使用IN()AND NOT IN()跳过另一行。 但这似乎不能正常工作。有人知道为什么吗?
谢谢!
SELECT *
FROM `prospect`
WHERE id IN (SELECT idprospect
FROM envoi_prospect
WHERE idenvoi IN ( '1', '2', '3', '4',
'6', '7', '10', '12' )
AND id NOT IN (SELECT idprospect
FROM envoi_prospect
WHERE idenvoi IN ( '8', '9', '11', '13' ))
ORDER BY `date` DESC
LIMIT 0, 30
答案 0 :(得分:1)
你错过了放置支架的信息:
SELECT *
FROM `prospect`
WHERE id IN (SELECT idprospect
FROM envoi_prospect
WHERE idenvoi IN ( '1', '2', '3', '4',
'6', '7', '10', '12' ))
AND id NOT IN (SELECT idprospect
FROM envoi_prospect
WHERE idenvoi IN ( '8', '9', '11', '13' ))
ORDER BY `date` DESC
LIMIT 0, 30
您可以将查询重写为:
SELECT *
FROM `prospect`
WHERE id IN (SELECT idprospect
FROM envoi_prospect
WHERE idenvoi IN ( '1', '2', '3', '4',
'6', '7', '10', '12' ) And
idenvoi NOT IN ( '8', '9', '11', '13' ) )
ORDER BY `date` DESC
LIMIT 0, 30
答案 1 :(得分:1)
虽然SQL语法肯定允许它,但同时应用IN过滤器和NOT IN过滤器并没有多大意义。
考虑一个包含以下记录的表:
ColA
1
2
3
4
如果你写这样的查询:
SELECT * FROM MyTable
WHERE
ColA IN (1, 2) AND
ColA NOT IN (4)
输出将是:
ColA
1
2
IN语句将查询过滤为仅包含ColA为1或2的行。因此,在这种情况下,完全不需要NOT IN查询。现在,如果您编写这样的查询:
SELECT * FROM MyTable
WHERE
ColA IN (1, 2, 3) AND
ColA NOT IN (3, 4)
输出与上面相同。为什么?好吧,既然在IN和NOT IN语句之间有一个AND
运算符,两者都必须求值为TRUE,才能输出一个记录。现在,对于表中的第3行,ColA IN (1, 2, 3)
的计算结果为TRUE,但ColA NOT IN (3, 4)
的计算结果为FALSE,因此不输出第3行。