我有读取数据库的权限。我想检查与多个表关联的许多(日期)列,以查看这些列中的任何列的值是否超出指定范围。
例如,我可能以相同的日期格式使用TBL1.from_date,TBL2.from_date,TBL2.to_date,TBL3.birthdate。我想检查所有列以查看它们是否落在1990 - 2025年之间,而不是对每列的日期范围进行硬编码。我知道我可以将IN子句用于单个值,但不知道如何专门用它来进行比较。
当前SQL查询:
select TBL_A.acct_no
from TBL_A, TBL1, TBL2, TBL3
where TBL_A.acct_no = TBL1.acct_no and
TBL1.acct_no = TBL2.acct_no and
TBL2.acct_no = TBL3.acct_no and
(
TBL1.from_date < '01-JAN-1990' or
TBL1.from_date > '01-JAN-2025' or
TBL2.from_date < '01-JAN-1990' or
TBL2.from_date > '01-JAN-2025' or
TBL2.to_date < '01-JAN-1990' or
TBL2.to_date > '01-JAN-2025' or
TBL3.birthdate < '01-JAN-1990' or
TBL3.birthdate > '01-JAN-2025' or
);
我正在尝试实现的SQL查询示例:
select TBL_A.acct_no
from TBL_A, TBL1, TBL2, TBL3
where TBL_A.acct_no = TBL1.acct_no and
TBL1.acct_no = TBL2.acct_no and
TBL2.acct_no = TBL3.acct_no and
-- psudo-code
(date range) not in (TBL1.from_date, TBL2.from_date, TBL2.to_date, TBL3.birthdate);
答案 0 :(得分:0)
您可以使用least()
和greatest()
函数将最小列值与下边界和最大列值与上边界进行比较:
...and (
least( tbl1.from_date, tbl2.from_date, tbl2.to_date) < '01-JAN-1990' or
greatest( tbl1.from_date, tbl2.from_date, tbl2.to_date) > '01-JAN-2025'
)