web-dev-qa-db-fra.com

Requête Mysql pour joindre trois tables

J'utilise cette requête:

SELECT a.sales_id, d.bus_title, a.cat_id
FROM tbl_sales a
INNER JOIN tb_category b ON a.cat_id = b.cat_id
INNER JOIN tbl_business d ON d.bus_id = a.bus_id

ce qui produit ce résultat:

sales_id  | bus_title      |cat_id
----------|----------------|------------
 1        | Business 1     | 6  
 2        | Business 12    | 12
 3        | Business 123   | 25

J'ai changé le champ cat_id en une nouvelle table nommée tb_sales_category qui contient les champs sales_category_id, sales_id, cat_id. Comment puis-je écrire la nouvelle requête en joignant également cette table pour obtenir le même résultat que ci-dessus?

Je suis un peu nouveau dans les bases de données, j'ai besoin d'aide. Merci d'avance

14
Jimmy M

Essaye ça:

SELECT a.sales_id, d.bus_title, s.cat_id
FROM tbl_sales a
INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id
INNER JOIN tbl_business      d ON a.bus_id   = d.bus_id
INNER JOIN tb_category       b ON s.cat_id   = b.cat_id

L'idée est assez simple, le premier champ de votre nouvelle table tb_sales_category lequel est sales_category_id fonctionne comme clé de substitution, cela n'a rien à voir avec les relations entre les deux autres tables. Ensuite, nous arrivons aux deux autres domaines qui sont sales_id, cat_id, ce que vous devez mapper aux deux autres côtés des relations.

Vous ne pouvez pas Join tb_category b ON a.cat_id = b.cat_id sur le nouveau schéma parce que nous n'avons plus a.cat_id, et voici la nouvelle table tb_sales_category rôle, en l'insérant avec deux côtés de reliure, un avec INNER JOIN tb_category b ON s.cat_id = b.cat_id et l'autre avec INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id nous devrions avoir terminé.

J'espère que cela a du sens.

14
Mahmoud Gamal

Je ne suis pas un grand fan des jointures internes, alors essayez ceci:

SELECT a.sales_id, a.cat_id, c.bus_title
FROM tb_sales_category a, tb_sales b, tbl_business c
WHERE a.sales_id = b.sales_id
AND b.bus_id = c.bus_id
4
gimg1