基本上我必须编辑别人的其他代码,查询是:
DELETE FROM some_table WHERE 1
谷歌搜索没有找到类似的东西。
我无法理解病情。请问有人向我解释一下吗?
答案 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