我正在 Oracle 数据库中工作。假设我有下一张表(表 1):
合同 | 键1 | 键2 |
---|---|---|
合同1 | abcdefghijklmn | 空 |
合约2 | 空 | uhbgnd |
还有下表(表2):
键 | 键值 |
---|---|
abcdefghijklmn | 30 |
1234uhbgnd | 4 |
我想通过 table2 的键将它们连接起来。正如您所看到的,在表 1 中,我将键分为两列。在这种情况下,我想要的是首先通过 t2.key = t1.key1 JOIN,如果 Key 1 为 NULL,那么我想要的 JOIN 是 SUBSTR(t2.key, 5) = t1.key2。
在我看来,JOIN 看起来像这样:
SELECT
t1.contract,
t2.key,
t2.key_value
FROM
table1 t1
INNER JOIN table2 t2
ON CASE
WHEN t1.key1 IS NOT NULL THEN t2.key = t1.key1
ELSE SUBSTR(t2.key, 5) = t1.key2
因此,理想的输出是:
合同 | 键 | 价值 |
---|---|---|
合同1 | abcdefghijklmn | 30 |
合约2 | 1234uhbgnd | 4 |
但是,我无法完成这项工作。你能帮我吗?
您可以使用 OR 进行修改。
SELECT
t1.contract,
t2.key,
t2.key_value
FROM
table1 t1
INNER JOIN table2 t2
ON (t1.key1 IS NOT NULL AND t2.key = t1.key1)
OR (t1.key1 IS NULL AND SUBSTR(t2.key, 5) = t1.key2);
此查询首先检查 key1 是否不为 NULL 并连接 t2.key = t1.key1