从相互关联的MySQL表中获取最大值

时间:2011-06-28 14:53:33

标签: php mysql join

我正在尝试使用LEFT JOIN统一一对查询,以便我可以在所需的列上执行ORDER BY

表A与表B具有唯一的一对多关系,表B与表C具有唯一的一对多关系。

对于表A中的每一行,我想获得表C中列的最大值。

我曾经拥有的是:

$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)

但我知道这是胡言乱语。我不知道从哪里开始。 对不起,我发现很难解释这个问题。

4 个答案:

答案 0 :(得分: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的空值。

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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);