Maison >base de données >tutoriel mysql >Comment joindre efficacement plusieurs tables dans MySQL pour récupérer des données associées ?

Comment joindre efficacement plusieurs tables dans MySQL pour récupérer des données associées ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-19 14:37:11557parcourir

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

Joindre plusieurs tables dans MySQL à l'aide de la jointure interne

Dans MySQL, l'instruction INNER JOIN vous permet de combiner des enregistrements de plusieurs tables en fonction d'un colonne commune. Pour effectuer une jointure multi-tables, vous pouvez utiliser la syntaxe suivante :

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;

Considérez le scénario suivant : vous disposez de quatre tables :

  • commandes : (user_id, pricing_id)
  • products_pricing : (id, product_id)
  • produits : (id, nom)
  • listes : (id, user_id, url)

Vous souhaitez récupérer tous les produits d'un utilisateur spécifique (user_id = 7) et les hyperliens pour chaque produit en utilisant l'URL correspondante depuis le tableau des listes.

Requête originale :

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';

Cette requête renverra tous les produits de l'utilisateur avec l'ID 7, mais elle n'inclura pas l'URL de chaque produit. .

Requête révisée :

Pour inclure l'URL de chaque produit, vous peut ajouter un autre INNER JOIN à la table des listings :

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';

Dans cette requête, nous avons :

  • INNER JOIN listings AS l ON l.user_id = o.user_id : Ceci joint la table des listes à la table des commandes en fonction de la colonne user_id.
  • WHERE o.user_id ='7' : Cela filtre les résultats pour inclure uniquement les lignes où le user_id dans le tableau des commandes est égal à 7.
  • AND l.id = 233 AND l.url = 'test.com' : cela ajoute des filtres supplémentaires pour garantir que seules les lignes avec un ID (233) et une URL spécifiques (« test.com ») sont incluses dans le résultat.

En utilisant cette requête révisée, vous pouvez récupérer avec succès les produits pour l'utilisateur spécifié, ainsi que les URL correspondantes pour les lier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn