一次更改多个WHERE子句

时间:2016-06-01 13:47:03

标签: sql

我有一个简单的查询,我运行多个文件,并使用UNION结合到结果。我的WHERE子句之一是需要更改的日期。我想知道是否有办法立即更改每个文件的日期参数,而不是在我的select语句中的每个位置都改变它?在下面的示例中,我想在两个位置更改CYYMMDD,而无需在两个位置手动更新。

SELECT

POATYP,
POACO#,
PHVND,
POAOR#,
POACOD,
POAAMT + POARC$ AS COLUMN0000

FROM 

CORP01.DSFILES95.DSPOACA DSPOACA,  
CORP01.DSFILES95.DSPOHDR DSPOHDR 

WHERE

DSPOACA.POACO# = DSPOHDR.PHCO#
AND DSPOACA.POAOR# = DSPOHDR.PHPO#
AND ( POATYP = A
AND PHPOD >= CYYMMDD) 

UNION SELECT 

POATYP,
POACO#,
PHVND,
POAOR#,
POACOD,
POAAMT + POARC$ AS COLUMN0000

FROM 

CORP01.DSFILES17.DSPOACA DSPOACA,  
CORP01.DSFILES17.DSPOHDR DSPOHDR 

WHERE 

DSPOACA.POACO# = DSPOHDR.PHCO#
AND DSPOACA.POAOR# = DSPOHDR.PHPO#
AND ( POATYP = A
AND PHPOD >= CYYMMDD) 

1 个答案:

答案 0 :(得分:4)

我有时会为此目的使用CTE

with params as (
      select CYYMMDD as cyymmdd
     )
select *
from ((select . . .
       from params cross join
            . . .
       where . . . PHPOD >= CYYMMDD
      ) union
      (select . . .
       from params cross join
            . . .
       where . . .
      ) . . .
     ) x;

注意:

  • 您应该使用UNION ALL,除非您打算承担删除重复项的开销。
  • 您应该学习使用显式JOIN语法。简单规则:从不FROM子句中使用逗号。
  • 在某些数据库中,您也可以使用变量执行类似操作,但大多数数据库都支持CTE。