2011-06-28 24 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にnull値を取得します:あなたはこのような何かをしたいです。

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 *'パターンが大好き! –

関連する問題