2009-09-03 10 views
1

Table1とTable2に関連しています。与えられたTable1.IDに対して、0個以上のTable2レコードが存在することがあります。私はテーブル2.Valueを取得したいビューを持っています。ここで、Table2.IDは与えられたTable1.IDに対して最大です。友人が派生テーブルを提案しましたが、それはfrom句にサブクエリが必要で、MySQLはそれを好まないのです。これを行う他の方法はありますか?サブクエリの代わりにセカンダリビューを設定しようとしましたが、非常に遅いようです。私はまた、Table2.ID = MAX(Table2.ID)をテストするためにhaving句を使用してみましたが、他のすべてのものを上にしてグループに入れない限り、その列を認識しません。MySqlビュー - 他の列が最大である1つの列の値

+0

どのバージョンのMySQLを使用していますか? 5.xを使用している場合はサブクエリでうまくいくはずです – Wade

+0

私はv5.0を使用しています。私が読んだドキュメントと私が得るエラーは、from句のサブクエリがビュー内で許可されていないことを示しています。それは5.0でのみですか? –

+0

MySQLのオープンバグです:http://bugs.mysql.com/bug.php?id=12755 –

答えて

0
SELECT t1.*, t2a.* 
FROM Table1 t1 
LEFT JOIN Table2 t2a 
ON (t1.table1_id = t2a.table1_id) 
LEFT JOIN Table2 t2b 
ON (t1.table1_id = t2b.table1_id AND t2a.table2_id < t2b.table2_id) 
WHERE t2b.table2_id IS NULL 
AND t1.table1_id = ?; 
+0

素晴らしい作品です!セカンダリビューよりもはるかに高速です。ありがとう。この方法で私が目にするべきパフォーマンス上の懸念事項はありますか?テーブルのサイズやインデックスなどについては? –

+0

さて、あなたは良いパフォーマンスが必要なクエリを常にEXPLAINで分析し、インデックスをよく使用し、ファイルセット/テンポラリテーブルを使用していないことを確認してください。しかし、このクエリは、正規化されたデータベースで取得できるほどスケーラブルです。 –

+0

いいですね。助けてくれてありがとう。 –

関連する問題