我正在使用MySQL,我想知道在我运行SLQ查询时,在以下情况下究竟会发生什么(或可能发生什么)
<案例1SELECT ...
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
语句会发生什么?
答案 0 :(得分:4)
只是一个逻辑AND
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
答案 1 :(得分:0)
在这两种情况下,都不会包含IN组和NOT IN组中出现的任何给定ID。
当检查ID为4的行时(例如),它必须满足布尔条件
4 IN(46,4,5)和4 NOT IN(46,4,5)
为false,因此不会返回ID为4的行。
同样适用于任何其他行,其ID出现在IN子句和NOT IN子句中,因为给定的ID不能同时存在且不存在于同一组ID中。