繁体   English   中英

联接时不存在记录时返回值,oracle

[英]Return value when no record exists on join, oracle

我有一个简单的场景,但正在努力:

说我有以下两个表:

tableA
Acol1 Acol2 Acol3       
1       2     3 

tableB
Bcol1 Bcol2 Bcol3   
1       2    true

一个问题:

select tabB.Bcol3 from tableA tabA, tableB tabB
where
tabA.Acol1 = tabB.Bcol1
and tabB.Bcol2 = 1
and tabA.Acol1 = 1;

我希望我的查询返回“假”值,因为该查询不存在任何记录。

PS:我不能使用用户聚合函数,因为实际上这种情况是包含15个联接和多个列的较大查询的一部分。

因此,以下解决方案已脱离上下文:

   select decode(max(tabB.Bcol3), null, 'FALSE', 'TRUE') from tableA tabA, tableB tabB
    where
    tabA.Acol1 = tabB.Bcol1
    and tabB.Bcol2 = 1
    and tabA.Acol1 = 1;

我尝试了左右外部联接,但徒劳无功。

LEFT JOINCOALESCE()

select coalesce(tabB.Bcol3, false)
from tableA tabA
left join tableB tabB on tabA.Acol1 = tabB.Bcol2
    and tabB.Bcol2 = 1
where tabA.Acol1 = 1;

COALESCE()返回第一个非空值。 如果联接未能找到匹配项,则tableB的列将为null-这将返回默认值false

联接条件可能包括非关键条件,这似乎鲜为人知。 通过将tabkeB的额外条件包括在联接条件中,左联接在为tableA返回一行时仍然有效。 如果留在where子句中,则将不会返回任何行,因为在进行连接后将列出where子句,并且由于null不等于1而将失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM