我使用的是MySQL,我想知道在以下情况下,当我以类似的方式运行SLQ查询时,到底会发生什么(或可能发生什么)
案例1
SELECT ...
WHERE 'articles'.'author_id' = 2
AND (articles.id IN (46,4,5))
AND (articles.id IN (4,5,16,40))案例2
SELECT ...
WHERE 'articles'.'author_id' = 2
AND (articles.id NOT IN (46,4,5))
AND (articles.id IN (4,5,16,40))特别是,我的意思是,在articles.id子句中双倍的WHERE语句会发生什么?
发布于 2012-06-09 00:47:56
只是一个合乎逻辑的
1 && 1 = 1
0 && 1 = 0
1 && 0 = 0
0 && 0 = 0适用于1.情况:
Value IN (46,4,5) AND IN (4,5,16,40) Result
4 1 1 1
5 1 1 1
46 1 0 0
16 0 1 0
40 0 1 0适用于2.案件:
Value NOT IN (46,4,5) AND IN (4,5,16,40) Result
4 0 1 0
5 0 1 0
46 0 0 0
16 1 1 1
40 1 1 1发布于 2012-06-09 00:46:36
在这两种情况下,任何出现在In集和NOT in集中的给定ID都将不包括在内。
当使用ID 4检查行时(例如),它必须满足布尔条件
4 IN (46,4,5)和4非IN (46,4,5)
这是false,因此不返回ID 4的行。
对于ID出现在in子句和NOT IN子句中的任何其他行,同样的情况也是如此,因为给定的ID不能同时出现在同一组ID中,也不能出现在同一组ID中。
https://stackoverflow.com/questions/10957513
复制相似问题