在Oracle中,启动SQL Query WHERE子句1 = 1有用吗?

问题描述 投票:5回答:3

我正在与一个客户端一起工作,该客户端使用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 oracle
3个回答
18
投票

这样做是为了简化动态SQL生成。基本上每个条件可以添加为AND <condition>而不将第一个条件视为特殊条件(它之前是WHERE而不是AND),甚至担心是否应该有WHERE条款。

所以把它写成易于使用或可以说是懒惰。


3
投票

如果他们动态构建查询,则应检查他们是否正在使用绑定变量。从文字构建查询需要额外的解析,可能会限制可伸缩性,并且还会大大增加SQL注入攻击的风险。

where 1 = 1 and my_id = :b1;

(然后定义绑定变量的值)

通常比以下更好:

where 1 = 1 and my_id = 123456;

0
投票

他们可能已经从子串构建了查询。

它可能是一种仅使用ANDs构建它的方法,具体取决于业务规则匹配,因此您不必关心哪个是您的第一个条件。

不会那样做我自己。

© www.soinside.com 2019 - 2024. All rights reserved.