ホームページ >データベース >mysql チュートリアル >MySQL テーブルを結合するときに最新の行のみを取得するにはどうすればよいですか?

MySQL テーブルを結合するときに最新の行のみを取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 16:17:39834ブラウズ

How to Retrieve Only the Most Recent Row When Joining MySQL Tables?

MySQL テーブルを結合して最新の行のみを取得する

データ管理システムでは、複数のソースからの情報を組み合わせるためにテーブルを結合することが不可欠です。履歴データを扱う場合、結合されたテーブルの 1 つから最新の行を取得することが必要になることがよくあります。

顧客データが customer と customer_data の 2 つのテーブルに保存されている顧客データベースのシナリオを考えてみましょう。 customer テーブルには基本的な顧客情報が含まれ、customer_data には顧客のプロファイルへの変更が保存されます。顧客の情報をテーブルに表示するには、2 つのテーブルを結合する必要がありますが、必要なのは customer_data の最新の行だけです。

これを実現するには、MySQL の MAX() 関数をサブクエリとともに利用できます。 customer_data の最新の行の ID を見つけます。クエリは次のようになります。

SELECT 
  c.*,
  cd.value
FROM 
  customer c
LEFT JOIN 
  customer_data cd ON c.customer_id = cd.customer_id
WHERE 
  cd.customer_id = (
    SELECT 
      MAX(customer_id) 
    FROM 
      customer_data
    WHERE 
      customer_id = c.customer_id
  )

このクエリは、最初に customer テーブル (接頭辞 c. が付く) からすべての列を取得します。次に、customer_data テーブル (接頭辞 cd.) との LEFT JOIN を実行し、customer_data 内の行をフィルタリングして、各顧客の最大の customer_id (サブクエリによって決定される) を持つ行のみを含めます。

さらに、リファレンス クエリで説明したように、CONCAT() と LIKE を使用して、連結された列内の特定の値を検索できます。サンプル クエリでは、CONCAT(title,' ',forename,' ',surname) が文字列 '%Smith%' と比較されます。これにより、結合フィールドのどこかに部分文字列「Smith」を含むすべての顧客名が返されます。

以上がMySQL テーブルを結合するときに最新の行のみを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。