2015-04-20 55 views
0

與最大值行中加入通常當我需要與另一列一些最大值參加行我做這樣的事情:通過jointable

SELECT * 
FROM a 
INNER JOIN b ON (a.aid = b.aid) 
LEFT JOIN b nullb ON (a.aid = nullb.aid AND nullb.value > b.value) 
WHERE nullb.bid IS NULL; 

我不知道這是否是最高效的方式,但它是沒有子查詢的解決方案,我儘可能避免。

今天,我需要加入另一個表中通過連接表加入的最大值,但無法找到一種方法來實現它。

我想是這樣的:(其中慘遭失敗)

SELECT * 
FROM a 
INNER JOIN atob ON (a.aid = atob.aid) 
INNER JOIN b ON (atob.bid = b.bid) 
LEFT JOIN atob nullatob ON (a.aid = nullatob.aid) 
LEFT JOIN b nullb ON (nullatob.bid = nullb.bid AND nullb.value > b.value) 
WHERE nullb.bid IS NULL; 

我建立了一個sqlfiddle在:http://sqlfiddle.com/#!9/86f18/6這個問題成立。

任何人都有一種聰明的方式,通過連接表從另一個表中加入最大值,而不使用子查詢,或者這幾乎是不可能的?

回答

0

不知道什麼是你的目標,但是:

http://sqlfiddle.com/#!9/86f18/13

SELECT A.*, b.* 
FROM A 
INNER JOIN AtoB 
ON (A.Aid = AtoB.Aid) 
LEFT JOIN (
    SELECT B.* 
    FROM B 
    LEFT JOIN b nullB 
    ON (B.Bid = nullB.Bid AND nullB.bdate > B.Bdate) 
    WHERE nullB.Bid IS NULL 
) b 
ON AtoB.Bid = b.Bid