2012-12-06 5 views
0

Regarder cette solution: MySql Join three tablesjoindre plusieurs colonnes de 3 tables

je vois que je peux joindre à 3 tables en faisant quelque chose comme ceci:

select s.name "Student", c.name "Course" 
from student s, bridge b, course c 
where b.sid = s.sid and b.cid = c.cid 

Mais il semble que je ne peux sélectionner un seul colonne de chaque table? Je dois rejoindre plusieurs tables de 3 colonnes avec sys_visits étant la table principale où userid = contrID (sys_users, sys_visits) et clientID = clientId (sys_client, sys_visits)

SELECT pid, clientID, contrID, serviceDate, serviceStart, serviceStop FROM sys_visits 
SELECT userGroupID, userID, fname, lname FROM sys_users 
SELECT clientID, clientFName, clientLName FROM sys_client ORDER BY clientLName ASC 

J'ai essayé de nombreuses variations et ne peuvent pas semble avoir la syntaxe correcte?

+0

Lorsque vous voulez vous joindre à utiliser le programme 'joins' :) et vous pouvez sélectionner un nombre Ofcourse si colonnes. – bonCodigo

+0

mysql ne pas par défaut à la jointure interne quand aucun type de jointure n'est spécifié? Mais oui, en général, vous pouvez sélectionner n'importe quelle colonne de n'importe quel nombre de tables interrogées. [edit] et vous pouvez baser votre jointure sur l'équivalence de n'importe quel nombre de colonnes. – akronymn

Répondre

2

utilisent le format ANSI SQL-92 de se joindre à la place.

SELECT a.*, b.*, c.* 
FROM sys_users a 
     INNER JOIN sys_visits b 
      ON a.userID = b.contrlD 
     INNER JOIN sys_client c 
      ON b.clientID = c.clientID 

l'utilisation des astérisques dans la requête indique que vous sélectionnez toutes les colonnes des tables. Si vous voulez choisir uniquement des colonnes spécifiques, déclarer les noms de colonnes explicitement sur la requête, par exemple:

SELECT a.userGroupID, a.userID, a.fname, a.lname, 
     b.*, 
     c.* 
FROM sys_users a 
     INNER JOIN sys_visits b 
      ON a.userID = b.contrlD 
     INNER JOIN sys_client c 
      ON b.clientID = c.clientID 
+0

Merci beaucoup pour l'aide! –

+0

J'ai utilisé celui-ci, mais dans mon état, j'ai 2 colonnes avec seulement 1 rangée remplie et une colonne dans la 3ème table avec 2 rangées remplies.Alors quand je vais chercher, tout cela, iam obtenir seulement 1 ligne de toutes les tables! ! –

1

Vous pouvez sélectionner des colonnes numériques parmi les tables.

SELECT sv.pid, sv.clientID, sv.contrID, sv.serviceDate, sv.serviceStart, sv.serviceStop, su.userGroupID, su.userID, su.fname, su.lname, sc.clientFName, sc.clientLName 
    FROM sys_visits sv, sys_users su, sys_client sc 
    ORDER BY sc.clientLName ASC 

Heres une autre méthode utilisant JOINS[Recommandé]

SELECT sv.pid, sv.clientID, sv.contrID, sv.serviceDate, sv.serviceStart, sv.serviceStop, su.userGroupID, su.userID, su.fname, su.lname, sc.clientFName, sc.clientLName FROM sys_visits sv 
JOIN sys_users su ON su.userID = sv.contrID 
JOIN sys_client sc ON sc.clientID = sv.clientID 
ORDER BY sc.clientLName ASC 
+1

la deuxième requête est bien mais le premier produit 'CROSS JOIN'. –

+0

Oui, vous avez raison. J'essaie d'expliquer OP colonne de la table multiple peut être sélectionné sur la première requête. –

1

Pensez si vous avez trois tables par exemple

désignation, qualification, spécialisation et professeur table.Here si vous voulez à se joindre à trois tables à l'intérieur table enseignant qui a teacher_id, TEACHER_NAME, designation_id, qualification_id, specialization_id, statut etc ...
 
    SELECT 
    t.name as teacher_name, 
    d.name as designation_name, 
    q.name as qualification_name, 
    s.name as specialization_name 
     FROM teachers t 
    INNER JOIN designation d ON t.designation_id = d.id 
    INNER JOIN qualification q ON t.qualification_id = q.id 
    INNER JOIN specialization s ON t.specialization_id = s.id 
    WHERE t.status = 1;