我有三个表,如下所示:

我正在尝试获得如下输出:

这是我到目前为止尝试过的

    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
    (

    )

现在我在努力选择tb3_a列的最大值

最佳答案

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

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);

关键是中间的嵌入式 View ,我们在其中创建一种虚拟表,其中包含每个tb2_b的最大tb2_a值。然后,我们可以加入到这一过程中以达到期望的结果。

关于sql - 左外连接Oracle中的三个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15008371/

10-11 01:41