where 1 = 1是怎where 1 = 1是怎么用的,首先看一段代码,这段代码是我在ebs的总账模块中随便找的一段,以v_开头的都是会给定的变量,不用纠结,大概看看样式就好:么用的,首先看一段代码,这段代码是我在ebs的总账模块中随便找的一段,以v_开头的都是会给定的变量,不用纠结,大概看看样式就好:
- SELECT 1
- FROM gl_je_lines gjl
- WHERE gjl.ledger_id = v_ledger_id
- AND gjl.reference_5 = v_batch_name
- UNION ALL
- SELECT 1
- FROM gl_interface gi
- WHERE 1 = 1
- AND gi.ledger_id = v_ledger_id
- AND gi.reference25 = v_batch_name
- AND nvl(gi.status,
- 'NEW') <> 'PROCESSED';
复制代码where 1 = 1表示的就是true,就是一个为真的条件,这种用法多用在需要用户输入判断条件的地方,比如说在开发报表的时候,用户会自己输入相应的条件判断。如果,没有where 1= 1,那么只有当where后面的判断语句能够满足的时候才能正常执行;但是,假如后面的判断没有满足,这个时候where后面就没有判断,类型于select * from t_table where,而如果有了where 1 =1 这个条件,那么这个时候就类型于select * from t_table where 1 = 1,这个时候后面就有了一个表示true的条件,执行的时候就不会出现问题。 所以,在做开发的时候,要注意别忘了适当的加上这个条件,如果不知道什么时候该加,那就什么时候都加上吧,这样虽然挺笨,但是也没错。补充一下,至于where 1 = 0的应用,可以用来获取表的结构,如下: - CREATE TABLE t_a
- AS
- SELECT *
- FROM t_b
- WHERE 1 = 0;
复制代码使用where 1 = 0可以非常方便的获取表结构,去除表中的记录数据。 2014-11-04补充: 在一个SQL语句中,由于from子句是必需的,它总是被第一个评估的子句。如果指定了where子句,那么from子句的评估结果将用于where子句;如果没有指定where子句,那么from子句的评估结果将用于下一个指定的子句,例如,group by子句或having子句。在表达式中的最后一个子句被评估完之后,它的结果将用于select子句。在评估完select子句后,将评估order by子句。
|