2010-11-04 98 views
2

在表A和B之間以及表B和C之間有一對多關係。我需要列出表B中的所有記錄以及它們在表A中的父項,以及C中某個特定字段的和()。我該怎麼做?在SQL查詢中多次連接

我覺得是這樣的:

SELECT A.fldlist, 
     B.fldlist, 
     SUM(C.field) 
    FROM A 
    INNER JOIN B ON A.key = b.FK 
    LEFT OUTER JOIN C on B.key = C.FK 
    GROUP BY B.field 

任何想法?非常感謝...

+0

你錯過了'a.fldlist'在GROUP BY - 否則看起來不錯。 – 2010-11-04 01:58:30

回答

1

如果您希望將通過在各個領域和B你總是可以做到這一點

With tmp as 
(
    SELECT c.FK, SUM(C.field) as field 
    FROM C 
    GROUP BY c.FK 
) 
SELECT A.*, B.*, tmp.FK, tmp.field 
FROM A 
     INNER JOIN B ON A.key = b.FK 
     LEFT OUTER JOIN tmp ON b.key = tmp.FK 
+0

謝謝clyc。我如何將x設置爲一個值?我嘗試將它逐字地插入到你的select子句中,並且可以爲第一次出現而不是第二次出現... – 2010-11-04 02:29:46

+0

x是一個別名,因此不會將其設置爲值。您可以隨時將x重命名爲tmp – clyc 2010-11-04 02:31:26

+0

謝謝clyc。這太棒了。 – 2010-11-04 02:58:23

5

關閉,但您需要按SELECT中的所有非聚合列進行分組。

SELECT A.fldlist, 
     B.fldlist, 
     SUM(C.field) 
    FROM A 
    INNER JOIN B ON A.key = b.FK 
    LEFT OUTER JOIN C on B.key = C.FK 
    GROUP BY A.fldlist, B.fldlist 
+0

謝謝喬。如果我的字段列表很長,該怎麼辦?在這種情況下,它實際上是來自表A和B的所有字段。 – 2010-11-04 02:04:37

+0

您需要按選擇列表中的所有字段進行分組,這些字段不是聚合函數(如「sum」)的一部分。 – ulty4life 2010-11-04 02:29:26

+0

@Kim:你找到了clyc對你問題的回答。 – 2010-11-04 03:09:25