我正在与一个客户端一起工作,该客户端使用1=1
启动Oracle中几乎所有的WHERE子句。原谅我的无知,但这不是一个无操作吗?这种用法有任何负面影响吗?
这是一个擦洗的例子:
SELECT gpz.zname
,gpp.pname
FROM table1 gpp INNER JOIN table2 gpz ON gpz.p_id = gpp.p_id
WHERE 1=1
AND gpp.active = 1
AND gpz.active = 1
这样做是为了简化动态SQL生成。基本上每个条件可以添加为AND <condition>
而不将第一个条件视为特殊条件(它之前是WHERE
而不是AND
),甚至担心是否应该有WHERE
条款。
所以把它写成易于使用或可以说是懒惰。
如果他们动态构建查询,则应检查他们是否正在使用绑定变量。从文字构建查询需要额外的解析,可能会限制可伸缩性,并且还会大大增加SQL注入攻击的风险。
where 1 = 1 and my_id = :b1;
(然后定义绑定变量的值)
通常比以下更好:
where 1 = 1 and my_id = 123456;
他们可能已经从子串构建了查询。
它可能是一种仅使用AND
s构建它的方法,具体取决于业务规则匹配,因此您不必关心哪个是您的第一个条件。
不会那样做我自己。