ホームページ >データベース >mysql チュートリアル >MySQL の履歴テーブルから最新の行を効率的に結合するにはどうすればよいですか?
customer と customer_data という 2 つのテーブルがあり、後者には顧客の変更履歴が含まれている場合、当面のタスクは取得することです。 customer_data の最新のエントリのみが customer テーブル内の各顧客に結合されるようにしながら、顧客情報を確保します。
これを実現するには、メインのクエリ本体の代わりに WHERE 句を使用すると、パフォーマンスが向上し、コードが読みやすくなります。最適化されたクエリは次のとおりです。
SELECT c.*, CONCAT(title, ' ', forename, ' ', surname) AS name FROM customer c LEFT JOIN customer_data d ON c.customer_id = d.customer_id WHERE d.customer_id = ( SELECT MAX(customer_id) FROM customer_data WHERE customer_id = c.customer_id ) LIMIT 10, 20;
このクエリは、WHERE 句内でフィルタリングすることにより、customer_data の最新の行のみが customer 内の各顧客に対して結合されるようにします。 LEFT JOIN を使用すると、customer_data に対応するエントリがない場合でも、customer のすべての顧客が結果に含まれるようになります。
CONCAT と LIKE を一緒に使用することに関する懸念については、そのとおりです。 CONCAT は文字列を連結し、その結果の文字列を LIKE 演算子とともに使用してパターン マッチングを実行できます。その点ではあなたのクエリは有効です。
以上がMySQL の履歴テーブルから最新の行を効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。