我有一个SQL SELECT语句,
SELECT * FROM users WHERE ""=""
结果是它返回所有行。
那么,""=""
是什么意思?
答案 0 :(得分:3)
这是一个不必要的WHERE子句,表示应该选择所有行。
=
运算符用于检查相等性,WHERE子句将返回特定条件为真的所有记录(在本例中为""=""
)。由于此条件将始终计算为true(因为空字符串始终等于空字符串),因此将选择表中的所有行。
您可以将其全部关闭以获得相同的结果:
SELECT *
FROM users
答案 1 :(得分:0)
恕我直言,最后一部分可以删除。这个where语句比较每个数据集的两个静态值,因此每个数据集都是相同的。
答案 2 :(得分:0)
这样的构造通常用于在动态SQL中构造where
子句。例如,如果用户可以选择名称或国家/地区,则可以将查询编写为:
where (name = @name or @name is null) and
(county = @country or @country is null)
虽然这捕获了逻辑,但它并没有很好地优化。因此,应用程序通常使用动态SQL来构造逻辑:
set @where = '1=1';
set @where = concat(@where, if(@name is not null, ' and name = @name', ''));
set @where = concat(@where, if(@country is not null, ' and country = @country', ''));
使用"" = ""
只是1=1
的另一种形式。
我可以看到这将如何落入关于SQL注入的讨论,因为它们都与用户输入有关。
但实际上,这有点懒,因为可以在没有额外比较的情况下编写查询(尽管MySQL会在编译阶段对其进行优化)。