来自不同表的最多两列

时间:2013-06-02 12:04:10

标签: sql oracle oracle11g

我需要从不同表中的两列中获取最大值。 例如,来自schoolorder和platterorder的最大郊区。 platterorder有clientnumbers链接到normalclient,schoolorder有客户端数据链接到学校。

我有这个:

SELECT MAX (NC.SUBURB) AS SUBURB
FROM normalClient NC
WHERE NC.CLIENTNO IN
(SELECT PO.CLIENTNO
FROM platterOrder PO
WHERE NC.CLIENTNO = PO.CLIENTNO)
GROUP BY NC.SUBURB
UNION
SELECT MAX (S.SUBURB) AS SCHOOLSUBURB
FROM school S
WHERE S.CLIENTNO IN
(SELECT S.CLIENTNO
FROM schoolOrder SO
WHERE S.CLIENTNO = SO.CLIENTNO)
GROUP BY S.SUBURB)

然而,从拼盘顺序获得最大值并将其与学校的最大值相结合。我需要的是两者的最大值。

=============================================== ==

抱歉让这个让人困惑!

输出应该只有一行。 它应该是普通客户和学校客户的最大订单来自的郊区。订单按正常客户的拼盘顺序列出,以及学校客户的学校订单。所以它是两个没有直接关系的表的最大值。

希望能稍微清理一下!

1 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,则您不需要使用GROUP BY,因为您需要该字段的MAX。我还更改了您的语法,使用JOIN而不是IN,但IN的工作方式应该相同:

SELECT MAX (NC.SUBURB) AS SUBURB
FROM normalClient NC
    JOIN platterOrder PO ON NC.ClientNo = PO.ClientNo
UNION
SELECT MAX (S.SUBURB) AS SCHOOLSUBURB
FROM school S
    JOIN schoolOrder SO ON S.CLIENTNO = SO.CLIENTNO

在了解您的表格结构并查看示例数据时,我建议您从MAX获取UNION结果的最佳方法是使用subquery。使用JOINs可能有更好的方法,但很难从您的问题中推断出来:

SELECT MAX(Suburb)
FROM (
    SELECT MAX (NC.SUBURB) AS SUBURB
    FROM normalClient NC
        JOIN platterOrder PO ON NC.ClientNo = PO.ClientNo
    UNION
    SELECT MAX (S.SUBURB)
    FROM school S
        JOIN schoolOrder SO ON S.CLIENTNO = SO.CLIENTNO
) T