sql - 尝试对一列和该列中的某些值进行内部连接
问题描述
正如标题所述,我正在尝试对两个表进行内部连接。对于其中一个表,您有一列填充了正常值。然而,对于另一个表,填充的值通常是正常的,但有时它填充了“-”,这意味着一切。
所以我想做一个内部连接,如果有一个“-”,它将与另一个表中的所有内容连接。这是我可以用 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
有什么建议么?任何和所有的帮助表示赞赏!
解决方案
我认为这将是:
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。
推荐阅读
- cmake - 在 Windows 10 上使用 CMake 编译 Assimp
- excel - 自动调整行然后添加高度
- augmented-reality - Google Cloud Anchor 和 Microsoft Azure Spatial Anchor 的区别
- python - 设置坐标原点 plotly python
- terraform - Template.tf 和 user_data.yaml.tpl- 通过 list 类型的变量循环
- reactjs - PropType 声明函数,值未定义
- javascript - 如果语句 JavaScript,数学在我的 else 语句中不起作用我做错了什么?
- php - 如何使用 PHP 函数使用 PDO 连接到 MySQL
- windows-10 - Pyplot 不适用于 Pyinstaller。exe崩溃没有错误
- python - 如何去除附着在另一个大轮廓上的小轮廓