2011-06-28 95 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 *'格局! –