2012-09-13 62 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。多谢! –