2012-12-06 47 views
0

看着這個解決方案:MySql Join three tables加入多列從3個表

我看到,我可以做這樣的事情加入3個表:

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

但好像我只能選擇一個每個表的列?我需要從3個表加入多個colums與sys_visits是主要的表,其中用戶ID = contrID(sys_users,sys_visits)和clientID的= clientID的

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 

我已經試過無數的變化和(sys_client,sys_visits)不能似乎得到正確的語法?

+0

當你想加入你應該使用'joins' :)和Ofcourse你可以選擇任何數字if列。當沒有指定連接類型時, – bonCodigo

+0

不會默認爲內部連接嗎?但是,一般來說,您可以從查詢的任意數量的表中選擇任何/所有列。 [edit]並且您可以將您的連接基於任意數量的列的等同。 – akronymn

回答

2

另一種方法,使用加入代替ANSI SQL-92格式。

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 

使用查詢星號表示您正在選擇從表中所有列。如果你想只能選擇特定的列上查詢,例如顯式聲明的列名:

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

非常感謝您的幫助! –

+0

我用過這個,但在我的情況下,我有2列只填充1行,第三張填充2列的一列。所以當我讀取所有這些時,iam從所有表格中只取得1行! ! –

1

您可以從表中選擇任意數量的列。

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 

赫雷什使用JOINS[推薦]

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

第二個查詢很好,但第一個查詢生成'CROSS JOIN'。 –

+0

是的,你是對的。我試圖解釋OP可以在第一個查詢中選擇多個表列。 –

1

認爲,如果你有例如

名稱,資質,專業化和教師table.Here三個表,如果你想加入老師表內的三個表,其中有teacher_id,teacher_name,designation_id,qualification_id,specialization_id,status等...
 
    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;