尝试与列和该列中的某些值进行任何内部连接
Trying to do an inner join with a column and some of the values in that column anything
如标题所述,我正在尝试对两个 table 进行内部连接。对于其中一个 table,您有一列填充了正常值。但是,对于其他 table,填充的值通常是正常的,但有时它会填充“-”,这意味着一切。
所以我想做一个内部联接,如果有一个“-”,它将与另一个 table 中的所有内容联接。这是我可以用 SQL 做的事情吗(顺便说一句,我正在使用 Oracle),但是如果它是一个正常的非“-”值,则执行正常的内部连接操作。
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
有什么建议吗?任何和所有帮助表示赞赏!
我认为这将是:
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 = '-';
Here 是一个 db<>fiddle.
如标题所述,我正在尝试对两个 table 进行内部连接。对于其中一个 table,您有一列填充了正常值。但是,对于其他 table,填充的值通常是正常的,但有时它会填充“-”,这意味着一切。
所以我想做一个内部联接,如果有一个“-”,它将与另一个 table 中的所有内容联接。这是我可以用 SQL 做的事情吗(顺便说一句,我正在使用 Oracle),但是如果它是一个正常的非“-”值,则执行正常的内部连接操作。
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
有什么建议吗?任何和所有帮助表示赞赏!
我认为这将是:
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 = '-';
Here 是一个 db<>fiddle.