1

このソリューションを見る: MySql Join three tables

次のようにして、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 

しかし、各テーブルから 1 つの列しか選択できないようです。userID=contrID (sys_users, sys_visits) および clientID=clientID (sys_client, sys_visits) であるメイン テーブルである sys_visits を使用して、3 つのテーブルから複数の列を結合する必要があります。

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

さまざまなバリエーションを試しましたが、正しい構文を取得できないようですか?

4

3 に答える 3

4

ANSI SQL-92代わりに joinの形式を使用してください。

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
于 2012-12-06T03:13:07.497 に答える
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
于 2012-12-06T03:12:06.400 に答える