2012-09-13 60 views
1

鑑於3桌下面列...短SQL挑戰,通過

表(列)

一個連接和秩序(a_pk,b_pk,其他)

B(b_pk,a_pk,c_pk)

C(c_pk,b_pk,日期)

(COM換貨:PK是一個主鍵,日期是一個日期)

...我想選擇...

A.a_pk,A.other,C.date

...有以下限制:

MAX(B.b_pk)由B.a_pk組(只選取每個A.a_pk最大B.b_pk的)

A.oth ER = '東西'(這只是其中example)

ORDER BY C.date(按最新日期排序)

下面是沒有成功的一次嘗試(別人看着更搞砸了)

SELECT A.a_pk, A.other, C.date 
FROM A, C 
WHERE 
A.other = 'something' 
AND 
A.a_pk IN 
    (
    SELECT max(B.b_pk), B.a_pk, B.c_pk, C.date 
    FROM B 
    INNER JOINT C ON C.b_pk = B.b_pk 
    GROUP BY B.a_kp 
) 
ORDER BY C.date DESC 

應該怎麼做?

回答

0

嘗試

 Select A.a_pk, A.other, C.date 
    From A Left Join (B Join C On C.b_pk = B.b_pk) 
     On B.a_pk = A.a_pk 
      And B.b_pk = 
       (Select Max(b_pk) 
        From B 
        Where a_pk = A.a_pk) 
    Order By C.Date 
+0

爲什麼使用LEFT JOIN?另外,你不需要在'b_pk'和'c_pk'上加入B和C嗎?實際上,這個問題並不完全清楚你是否做。 –

+0

使用外部連接是因爲我不知道;確定是否有可能沒有每個A記錄的B記錄......而對於pks,是的,從問題來看不清楚用_pk命名的列是否只有一部分的複合PK爲那個可怕的,或FKs在另一個表中的PK ... –

+0

起首!我只是測試它positiv。多謝! –