首页 > 解决方案 > 尝试对一列和该列中的某些值进行内部连接

问题描述

正如标题所述,我正在尝试对两个表进行内部连接。对于其中一个表,您有一列填充了正常值。然而,对于另一个表,填充的值通常是正常的,但有时它填充了“-”,这意味着一切。

所以我想做一个内部连接,如果有一个“-”,它将与另一个表中的所有内容连接。这是我可以用 SQL 做的事情吗(我正在使用 Oracle btw),但如果它是一个正常的非“-”值,则执行正常的内部连接操作。

t1:
A | B
1 | 2
- | 4
3 | 5



t2:
A | C
1 | 4
6 | 6


t3: result of inner join
A | B | C
1 | 2 | 4
1 | 4 | 4
6 | 4 | 6

有什么建议么?任何和所有的帮助表示赞赏!

标签: sqljoinoracle11g

解决方案


我认为这将是:

select t2.a, t1.b, t2.c
from t1 join
     t2
     on t1.a = t2.a or t1.a = '-';

请注意,or有时很难针对性能进行优化。因此,您可能会发现使用以下命令更快union all

select t2.a, t1.b, t2.c
from t1 join
     t2
     on t1.a = t2.a
union all
select t2.a, t1.b, t2.c
from t1 join
     t2
     on t1.a = '-';

是一个 db<>fiddle。


推荐阅读