在SQL Oracle中有条件地执行或不执行WHERE子句中的特定谓词

时间:2018-12-06 09:00:09

标签: sql oracle oracle11g oracle-sqldeveloper

SQL Oracle中是否有一种方法可以根据特定表中是否存在记录来有条件地在where子句中执行谓词。

示例

DataGridViewComboBoxColumn

当Table_C中不存在特定的公司ID时,不应将where子句中的这一部分视为执行。

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c
WHERE a.personalID = B.personalId
      and b.companyID = c.companyID

1 个答案:

答案 0 :(得分:2)

切换到现代的,明确的JOIN语法。

执行LEFT JOIN处理“当Table_C中不存在特定公司ID时”。

SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON a.personalID = B.personalId
LEFT JOIN TABLE_C c ON b.companyID = c.companyID

或者,保留古老的隐式连接并执行UNION ALL:

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c
WHERE a.personalID = B.personalId
      and b.companyID = c.companyID
UNION ALL
SELECT a.*, b.*, some null's
FROM TABLE_A a, TABLE_B b
WHERE a.personalID = B.personalId
  AND NOT EXISTS (select 1 from TABLE_C c
                  where b.companyID = c.companyID)