如何在连接变量 Oracle 数据库中连接两个带有条件的表

问题描述 投票:0回答:1

我正在 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

但是,我无法完成这项工作。你能帮我吗?

sql oracle join
1个回答
0
投票

您可以使用 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

© www.soinside.com 2019 - 2024. All rights reserved.