在 DELETE 命令中使用 IN 子句 - MySQL

Jam*_*008 1 mysql

我正在浏览官方MySQL 文档以了解DELETE子句。此页面说明

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Run Code Online (Sandbox Code Playgroud)

我可以从这个WHERE看到,ORDER BYLIMIT是允许的,但没有提到IN

因此,以下有效命令

DELETE FROM WHERE column = z OR column = y OR column = x OR column = w
Run Code Online (Sandbox Code Playgroud)

但是我写了下面的命令,它执行得很好,和上面的完全一样,但看起来更好。(也可能执行得更快)

DELETE FROM table WHERE column IN (z,y,x,w)
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?我想知道在这种情况下它是否有效,但其他情况会失败?另外,如果这很好,文档不应该说明吗?

Mic*_*bot 5

是的,您可以IN()在语句的WHERE子句中使用DELETE

没有“IN子句”——IN()只是一个比较运算符,可能稍微伪装成更复杂的东西。

http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_in

为了说明IN()真正在做什么,请单独考虑这些示例。

mysql> SELECT 1 IN (2,3,4); -- should be false
+--------------+
| 1 IN (2,3,4) |
+--------------+
|            0 | -- is indeed false
+--------------+
1 row in set (0.00 sec)

mysql> SELECT 1 IN (2,1,4); -- should be true
+--------------+
| 1 IN (2,1,4) |
+--------------+
|            1 | -- is indeed true
+--------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

...而且,正如@ypercube 所指出的,“where_condition是一个表达式,对于要删除的每一行,它的计算结果为真”。