在左连接中创建标志



我正在尝试为以下左连接产生的"Null"行创建一个新列(一种标识符标志(:

with CTE (...) as (
... unrelated code
) select * from CTE
left join (select columnID from table1) Pu
on CTE.columnID = Pu.columnID
left join (select case when bz.column2 is null then 'null test is working' else columnID2, column2 end FROM table2) Bz
ON CTE.columnID2 = Bz.columnID2

当我不尝试使用"案例何时"时,此代码工作正常。实际上,您完全可以忽略第一个左连接。

我的目的是能够在执行此操作时测试左连接结果,并根据结果采取行动:

如果左连接结果给出空行:为该行创建一个标志列

如果左连接结果给出一个正常的行:左连接正常完成,标志列为空(因为我怀疑它不可能不存在(。

如果你能帮我一把,我会很高兴的!

编辑:表格示例:

CTE
| columnID | columnID2 | InformationsCTE | 
|    ab    |    mp     |    randominfo1  |
|    ac    |    ma     |    randominfo2  |
|    ae    |    me     |    randominfo3  |
|    ad    |    mb     |    randominfo4  |
table2
| columnID2 | InformationsTable2  | 
|    mp     |     randominfo5     |
|    ma     |     randominfo6     |
|    me     |     randominfo7     |

第二个左连接后的结果:

new CTE
| columnID | columnID2 | InformationsCTE |  InformationsTable2|  FLAG |
|    ab    |    mp     |    randominfo1  |     randominfo5    |   OK  |
|    ac    |    ma     |    randominfo2  |     randominfo6    |   OK  |
|    ae    |    me     |    randominfo3  |     randominfo7    |   OK  |
|    ad    |    mb     |    randominfo4  |        NULL        |   NOK |

只需使用

T-SQL:

SELECT ISNULL(Column_to_check,'flag') FROM SomeTable

PL/SQL:

SELECT NVL(Column_to_check,'flag') FROM SomeTable

如果要从Column_to_check返回其他值,也可以使用 NVL2,如下所示:

NVL2(Column_to_check, value_if_NOT_null, value_if_null )

SELECT此列,使用ISNULL运算符并仅使用简单的LEFT JOIN不是更实用吗?我觉得你把它复杂化了一点。

像这样:

with CTE (...) as (
... unrelated code
) 
SELECT CTE.*, NVL(bz.InformationsTable2, 'TEST OK')
FROM CTE
LEFT JOIN table2 Bz ON CTE.columnID2 = Bz.columnID2

编辑:根据您的示例表,如果您在 ID 上联接,然后在另一列上使用 NVL,它应该适合您。

这是我为上一个问题准备的示例:SQL Fiddle

示例是在mysql中构建的,因此请注意语法,但从逻辑上讲,它的工作方式相同

为什么要连接?您似乎只想在其他表中查找数据,为此您将使用EXISTSIN

with cte (...) as (
... unrelated code
)
select 
cte.*,
case when columnid in (select columnid from table1) then 'okay' else 'fail' end as test1,
case when columnid2 in (select columnid2 from table2) then 'okay' else 'fail' end as test2
from cte;

最新更新