149 votes

Joindre trois tables à l'aide de MySQL

J'ai trois tables nommées

**Student Table**
-------------
id    name
-------------
1     ali
2     ahmed
3     john
4     king

**Course Table**
-------------
id    name
-------------
1     physic
2     maths
3     computer
4     chemistry

**Bridge**
-------------
sid    cid
-------------
1     1
1     2
1     3
1     4
2     1
2     2
3     3
3     4
4     1
4     2

Maintenant pour montrer le nom de l'étudiant avec le nom du cours qu'il a étudié comme,

**Result**
---------------------------
Student        Course
---------------------------
ahmed         physic
ahmed         maths
ahmed         computer
ahmed         chemistry
ali           physic
ali           maths
john          computer
john          chemistry
king          physic
king          maths

Je construis la requête suivante

select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name

Mais il ne renvoie pas le résultat requis...

Et que serait la forme normalisée, si je veux trouver qui est le manager par rapport aux autres :

**employee**
-------------------
id        name
-------------------
1         ali
2         king
3         mak
4         sam
5         jon

**manage**
--------------
mid      eid
--------------
1         2
1         3
3         4
4         5

Et veut obtenir ce résultat :

**result**
--------------------
Manager      Staff
--------------------
ali          king
ali          mak
mak          sam
sam          jon

1voto

Pavithra Points 7

Une requête de jointure avec trois tables et nous voulons deux valeurs de la même colonne, nous définissons le nom d'alias pour chaque table dans les jointures. Le même nom de table peut aussi être déclaré comme un nom différent.

const sql = `select p.ID,p.purchaseamount,urs.name as 
            buyername,pd.productname,
            pd.amount,urs1.name as sellername
            from  purchases p
            left join products pd on p.productid=pd.ID
            left join users urs on p.userid=urs.ID 
            left join users urs1 on  pd.userid=urs1.ID`

0voto

sameerNAT Points 87
SELECT 
employees.id, 
CONCAT(employees.f_name," ",employees.l_name) AS   'Full Name', genders.gender_name AS 'Sex', 
depts.dept_name AS 'Team Name', 
pay_grades.pay_grade_name AS 'Band', 
designations.designation_name AS 'Role' 
FROM employees 
LEFT JOIN genders ON employees.gender_id = genders.id 
LEFT JOIN depts ON employees.dept_id = depts.id 
LEFT JOIN pay_grades ON employees.pay_grade_id = pay_grades.id 
LEFT JOIN designations ON employees.designation_id = designations.id 
ORDER BY employees.id;

Vous pouvez JOINDRE plusieurs TABLEAUX comme dans l'exemple ci-dessus.

0voto

J'ajoute simplement aux réponses précédentes qu'avec MySQL, on peut soit utiliser

table_factor syntax 

OU

joined_table syntax

documentation mysql

Exemple de facteur de table

SELECT prd.name, b.name 
FROM products prd, buyers b

Exemple de table jointe

SELECT prd.name, b.name 
FROM products prd
 left join buyers b on b.bid = prd.bid;

Pour information : veuillez ignorer le fait que la jointure à gauche de l'exemple de table jointe n'a pas beaucoup de sens (en réalité, nous utiliserions une sorte de table de jointure pour lier l'acheteur à la table des produits au lieu de sauvegarder l'ID de l'acheteur dans la table des produits).

0voto

Chirag Patel Points 414
Query for three table join and limit set

SELECT * FROM (SELECT t1.follower_userid, t2.*, t3.login_thumb, t3.login_name, 
  t3.bio, t3.account_status, t3.gender
     FROM videos t2
      LEFT JOIN follower t1
        ON t1.follower_userid = t2.user_id 
         LEFT JOIN videos_user t3 
          ON t1.follower_userid  = t3.login_userid
           WHERE t1.following_userid='$userid'
            LIMIT $startpoint , $limit) AS ID 
             ORDER BY ID DESC

-1voto

user3477784 Points 1

Utilisez ça :

SELECT s.name AS Student, c.name AS Course 
FROM student s 
  LEFT JOIN (bridge b CROSS JOIN course c) 
    ON (s.id = b.sid AND b.cid = c.id);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X