我正在尝试使用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)
但我知道这是胡言乱语。我不知道从哪里开始。 对不起,我发现很难解释这个问题。
答案 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
答案 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);