Mysql查询中的奇怪条件

时间:2014-05-16 14:06:48

标签: mysql

基本上我必须编辑别人的其他代码,查询是:

DELETE  FROM some_table WHERE 1

谷歌搜索没有找到类似的东西。

我无法理解病情。请问有人向我解释一下吗?

5 个答案:

答案 0 :(得分:1)

WHERE 1条件意味着没有条件。从表中删除所有内容。它相当于DELETE FROM some_table。换句话说,条件说“where true”(1评估为true)所以它意味着无处不在......

答案 1 :(得分:1)

这将删除表中的所有行,因为where 1对于所有行都是true。它就像while(1)循环一样,总是如此。

很多时候人们将这种默认条件放在where条件的顶部,因为它使他们能够自由地切断和改变其他条件。有关详细信息,请参阅此question的答案。

答案 2 :(得分:1)

DELETE FROM some_table WHERE 1

就像

DELETE EVERYTHING FROM some_table

对于所有行,WHERE为1,因为1等于true。

当Bob检查上面的

时,数据库看起来像这样
Mysql - "Hey Bob, can you DELETE some_table WHERE items equal 1?"
Bob - "Yes, a moment.."
Mysql - "Wa..wait..! What's 1, Bob?"
Bob - "Ah yeah, in my world 1 is everything that evaluates to True, 
          and that's the default state of a self-standing row, 
            but lemme check it for you.."

*Bob is checking the rows...*
row1 <-- 1

row2 <-- 1

row3 <-- 1

Bob - "So, I checked the table and everything in there is 1 (or True), 
           let's delete all some_table's content!"
Mysql - "Agreed."

答案 3 :(得分:1)

如上所述,它将删除所有行(因为1为真)。如果要删除所有行,使用truncate table

通常会更有效
truncate table some_table

您可能希望使用where 1生成语句的一个原因是,您可以在之后添加其他条款。

答案 4 :(得分:0)

通常,当动态构建查询时,您会看到这样的条件(在Mysql中总是评估为TRUE - 其他RDMS可能会给您“无效的关系运算符”错误)。例如,

String basicQuery = "DELETE FROM table1 WHERE 1 " ; 
-- I'd use something less mysql specific, e.g WHERE (1=1) which works for every RDMS
if (some_condition) 
{
   basicQuery = basicQuery+ " AND field1 = :param1"; 
}
if (other_condition) 
{
   basicQuery = basicQuery+ " AND field2 = :param2"; 
} 
// etc