在Where子句中添加另一个表

时间:2018-11-30 21:02:36

标签: oracle

我正在使用Oracle DB。 我有一个像

这样的静态查询
SELECT * FROM TESTSCHEMA.TABLE_A WHERE LOAN_ID = :LOAN_ID

条件来自表的其余部分。

现在,我们遇到了一个场景,如果TABLE_A中的一列为NULL,我们需要引入一个新表,我需要从TABLE_B中获取值 我们不是要更改代码或部署代码,而是可以在表中进行更新。

SELECT
    *
FROM
    TESTSCHEMA.TABLE_A
WHERE
    LOAN_ID = :LOAN_ID
    AND
    (
    /* if COLUMNA is NULL in TABLE_A
       then i need to pull value from TABLE_B in the same select statement */
    )

2 个答案:

答案 0 :(得分:1)

我的解释... 如果您想限制基于columnA的返回值,而该值具有一个值,但是没有值(NULL)时,请使用表B中的columnB ...进行限制;然后合并&子查询即可。

或者您可以将整个子查询替换为标量函数并调用它。

SELECT *
FROM TESTSCHEMA.TABLE_A
WHERE LOAN_ID = :LOAN_ID
  AND COALESCE(COLUMNA,(SELECT ColumNName 
                        FROM table_B 
                        WHERE [Some Limits to get 1 record always]) = DesiredValue
  • 用所需的table_B列替换ColumnName
  • 用您要比较columnA或ColumnB的值替换DesiredValue
  • 添加where子句对table_B进行限制,以确保您始终只能获得1条记录。

或者...

SELECT *
FROM TESTSCHEMA.TABLE_A
WHERE LOAN_ID = :LOAN_ID
  AND COALESCE(COLUMNA,GetBValueWhenAValueNull(Paramaters?)) = DesiredValue

但是,这将需要更改部署/代码...不用猜测

答案 1 :(得分:0)

您可以做的是从tableA中删除NULL值

UPDATE TABLE_A 
SET value = (SELECT TABLE_B.value 
             FROM TABLE_B
             WHERE TABLE_A.LOAN_ID  = TABLE_B.LOAN_ID  )
WHERE LOAN_ID = :LOAN_ID
AND  value is NULL