2011-06-28 133 views
2

我試圖統一的一對查詢與LEFT JOIN,這樣我可以在所期望的列執行ORDER BY的最大值。獲取從相互關聯的MySQL表

表A具有表B的專用的一對多的關係,以及表B具有與表C中的專用一一對多關係

我希望得到一個列中的最大值表C,表A.每一行

我曾經有過被:

$tableA = SELECT * FROM tableA; 
for each row in $tableA { 
    $maxValue = SELECT MAX(value) FROM tableC WHERE tableB_id IN (SELECT tableB_id FROM tableB WHERE tableA_id={$row['tableA_id']}) GROUP BY tableB_id; 
} 

,現在我的線沿線的思考:

SELECT * FROM tableA LEFT JOIN (SELECT tableA_id, MAX(max_c_value) FROM (SELECT tableB_id, MAX(value) max_c_value FROM tableC GROUP BY tableB_id) t GROUP BY tableA_id) USING(tableA_id)

,但我知道這是胡言亂語。我不知道在哪裏可以從這裏走。 我發現很難解釋的問題,對不起。

回答

2
SELECT A.ID, MAX(C.MyField) as CField 
FROM A 
    LEFT OUTER JOIN B 
     ON A.ID = B.A_ID 
      LEFT OUTER JOIN C 
       ON B.ID = C.B_ID 
GROUP BY A.ID 

你會得到空值CField如果有相應的任何行。

0
select max(table3.field),table1.field from table1 
join table2 on table1.id=table2.table1_id 
join table3 on table2.id = table3.table2_id 
group by table1.field 
0

你在第一次嘗試時就更加接近了。你想是這樣的:

SELECT MAX(tableC.cValue) FROM tableA 
LEFT JOIN tableB 
    ON tableA.tableA_id = tableB.tableA_id 
LEFT JOIN tableC 
    ON tableB.tableB_id = tableC.tableB_id 

http://www.w3schools.com/sql/sql_join.asp

0

我設法解決它在我自己的,只有回到這裏,發現我是使事情太複雜了我自己,在表的海上迷路!

此代碼沒有實際工作,但我已經用簡單的代碼替換上面提示:

SELECT * FROM A LEFT JOIN (
    SELECT A_ID, MAX(val) FROM (
    SELECT * FROM B LEFT JOIN (
     SELECT B_ID, MAX(val) val FROM C GROUP BY B_ID 
    ) x USING(B_ID) 
) y GROUP BY A_ID 
) z USING(A_ID); 
+0

我愛'SELECT *'格局! –