度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle数据库中where 1 = 1的妙用 [打印本页]

作者: 万望    时间: 2020-4-4 22:35
标题: oracle数据库中where 1 = 1的妙用
where 1 = 1是怎where 1 = 1是怎么用的,首先看一段代码,这段代码是我在ebs的总账模块中随便找的一段,以v_开头的都是会给定的变量,不用纠结,大概看看样式就好:么用的,首先看一段代码,这段代码是我在ebs的总账模块中随便找的一段,以v_开头的都是会给定的变量,不用纠结,大概看看样式就好:
  1. SELECT 1
  2.   FROM gl_je_lines gjl
  3. WHERE gjl.ledger_id = v_ledger_id
  4.    AND gjl.reference_5 = v_batch_name
  5. UNION ALL
  6. SELECT 1
  7.   FROM gl_interface gi
  8. WHERE 1 = 1
  9.    AND gi.ledger_id = v_ledger_id
  10.    AND gi.reference25 = v_batch_name
  11.    AND nvl(gi.status,
  12.            '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的应用,可以用来获取表的结构,如下:

  1. CREATE TABLE t_a
  2. AS
  3. SELECT *
  4.   FROM t_b
  5. WHERE 1 = 0;
复制代码

使用where 1 = 0可以非常方便的获取表结构,去除表中的记录数据。

2014-11-04补充:

在一个SQL语句中,由于from子句是必需的,它总是被第一个评估的子句。如果指定了where子句,那么from子句的评估结果将用于where子句;如果没有指定where子句,那么from子句的评估结果将用于下一个指定的子句,例如,group by子句或having子句。在表达式中的最后一个子句被评估完之后,它的结果将用于select子句。在评估完select子句后,将评估order by子句。



作者: 陈晓龙    时间: 2020-4-5 19:44

作者: 陈晓龙    时间: 2020-4-5 19:47





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2