左外连接oracle中的三个表

jav*_*oob 5 sql oracle

我有三个表,如下所示:

在此输入图像描述

我想获得如下输出:

在此输入图像描述

这是我到现在为止所尝试的

    SELECT table1.tb1_a,
CASE WHEN table3.tb3_a IS NOT NULL THEN
    tb3_b
    ELSE 'No city for him yet'
END AS 'City'
FROM table1
LEFT OUTER JOIN table2 ON
    table1.tb1_a = table2.tb2_a
LEFT OUTER JOIN table3 ON
    table2.tb2_a = table3.tb3_a
WHERE table3.tb3_a IN
    (

    )
Run Code Online (Sandbox Code Playgroud)

现在我正在努力研究如何选择tb3_a列的最大值

nin*_*ded 2

这应该可以满足您的需要:

SELECT t1.tb1_a, COALESCE(t3.tb3_a, 'No city for him yet') AS City
FROM table1 t1
LEFT JOIN (
    SELECT MAX(tb2_b) AS tb2_b, tb2_a
    FROM table2
    GROUP BY tb2_a
) t2 ON (t2.tb2_a = t1.tb1_a)
LEFT JOIN table3 t3 ON (t3.tb3_a = t3.tb2_b);
Run Code Online (Sandbox Code Playgroud)

关键点是中间的内联视图,我们在其中创建一种虚拟表,其中包含tb2_b每个 的最大值tb2_a。然后我们可以加入其中以达到预期的结果。