使用`WHERE`子句中的双打`articles.id`语句会发生什么?

时间:2012-06-09 00:44:26

标签: mysql sql database where-clause where

我正在使用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语句会发生什么?

2 个答案:

答案 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中。