ホームページ > データベース > mysql チュートリアル > MySQL で複数のテーブルを効率的に結合して関連データを取得する方法

MySQL で複数のテーブルを効率的に結合して関連データを取得する方法

Barbara Streisand
リリース: 2024-12-19 14:37:11
オリジナル
546 人が閲覧しました

How to Efficiently Join Multiple Tables in MySQL to Retrieve Related Data?

内部結合を使用した MySQL での複数のテーブルの結合

MySQL では、INNER JOIN ステートメントを使用して、共通のコラム。複数テーブルの結合を実行するには、次の構文を使用できます。

SELECT columns
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column
[...]
INNER JOIN table_n
ON table_n-1.column = table_n.column;
ログイン後にコピー

次のシナリオを考えてみましょう。4 つのテーブルがあります:

  • orders: (ユーザーID、プライシング_id)
  • products_pricing: (id, product_id)
  • products: (id, name)
  • listing : (id、user_id、 url)

リスト テーブルから対応する URL を使用して、特定のユーザー (user_id = 7) のすべての製品と各製品のハイパーリンクを取得したいとします。

オリジナルクエリ:

SELECT *
FROM orders
INNER JOIN products_pricing
ON orders.pricing_id = products_pricing.id
INNER JOIN products
ON products_pricing.product_id = products.id
WHERE orders.user_id = '7';
ログイン後にコピー

このクエリは、ID 7 のユーザーのすべての製品を返しますが、各製品の URL は含まれません。

改訂されたクエリ:

各製品の URL を含めるには、リスト テーブルに別の INNER JOIN を追加できます。

SELECT
p.id,
p.name,
l.url,
o.user_id,
o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';
ログイン後にコピー

このクエリでは、 have:

  • INNER JOIN リスト AS l ON l.user_id = o.user_id: これにより、user_id 列に基づいてリスト テーブルが order テーブルに結合されます。
  • WHERE o.user_id ='7': これにより、orders テーブルの user_id が次と等しい行のみが含まれるように結果がフィルターされます。 7.
  • AND l.id = 233 AND l.url = 'test.com': これにより、特定の ID (233) と URL ('test.com') を持つ行のみが確実に検索されるように追加のフィルターが追加されます。

この改訂されたクエリを使用すると、指定したユーザーの製品と、リンク用の対応する URL を正常に取得できます。

以上がMySQL で複数のテーブルを効率的に結合して関連データを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート