1

我正在使用 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

4

2 回答 2

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
于 2012-06-09T00:47:56.520 回答
0

在这两种情况下,将不包括出现在 IN 集和 NOT IN 集中的任何给定 ID。

在检查 ID 为 4 的行时(例如),它必须满足布尔条件

4 在 (46,4,5) 和 4 不在 (46,4,5)

这是错误的,因此不会返回 ID 为 4 的行。

对于 ID 同时出现在 IN 子句和 NOT IN 子句中的任何其他行也是如此,因为给定的 ID 不能既存在又不存在于同一组 ID 中。

于 2012-06-09T00:46:36.060 回答