2016-07-04 10 views
1

参加している場合、私は2つのテーブル(studentclassとユーザーを)持っているMySQLは - 2テーブルを結合する第二テーブルは二回

テーブルstudentclass

columns (id, class_name, user_schoolid_faculty, user_schoolid_student) 

テーブルのユーザー

columns (id, firstname, lastname, schoolid, position) 

user_schoolid_faculty is a foreign key from schoolid 

user_schoolid_student is a foreign key from schoolid 

は私の第一クエリがあります

SELECT * FROM studentclass WHERE class_name = '$class_name' 

私はtを見たい彼のユーザーのファーストネームのデータとは、それは私がエラーではなく、独自のテーブルと同じテーブルuser用/別名「ユーザー」

+0

は、なぜあなたはaliassesを使用していけませんか?エイリアスはクエリの複雑さを軽減します。 –

+0

SELECT a.class_nameは、b.firstname、 INNER JOIN [ユーザー]としてstudentclass FROM をb.lastname b.user_schoolid_faculty ON Bなど= a.position = '学部' LEFTユーザ ONにJOIN a.schoolid b.user_schoolid_student = a.schoolid WHERE a.position = 'スチューデント –

答えて

1

SQL Serverの場合は、予備のキーワードuserのために角括弧を使用しています。
テーブルのエイリアス名も追加します。 MySQLの

SELECT SC.class_name, U1.firstname, U2.lastname 
FROM studentclass SC 
INNER JOIN [user] U1 ON SC.user_schoolid_faculty = U1.schoolid 
LEFT JOIN [user] U2 ON SC.user_schoolid_student = U2.schoolid AND U2.position = 'Student' 
WHERE U1.position = 'Faculty' 

SELECT SC.class_name, U1.firstname, U2.lastname 
FROM studentclass SC 
INNER JOIN `user` U1 ON SC.user_schoolid_faculty = U1.schoolid 
LEFT JOIN `user` U2 ON SC.user_schoolid_student = U2.schoolid AND U2.position = 'Student' 
WHERE U1.position = 'Faculty' 
+0

ありがとう! =)私はstudentclass SCからこのSELECT SC.class_name、U1.firstname、U1.lastname、U2.firstname、U2.lastname を使用インナーuser' U1 ON SC.user_schoolid_faculty = U1.schoolid LEFTは 'ユーザのJOIN' JOIN U1.position = '学部' – Maki

+0

が、それは私が=を必要なもの釘付け 'U2 ON SC.user_schoolid_student = U2.schoolid AND U2.position = 'スチューデント ) – Maki

1

、あなたは別のエイリアスを使用する必要がありますスローschoolid

SELECT studentclass.class_name, user.firstname, user.lastname 
FROM studentclass 
INNER JOIN user 
ON studentclass.user_schoolid_faculty = user.schoolid 
WHERE user.position = 'Faculty' 
LEFT JOIN user 
ON studentclass.user_schoolid_student = user.schoolid 
WHERE user.position = 'Student' 

を使用して、そしてときに使用LASTNAME JOIN、あなたがいないWHERE、2つのテーブルを結合するためにONを使用する必要があり、これを試してみてください;)

SELECT studentclass.class_name, user1.firstname, user2.lastname 
FROM studentclass 
INNER JOIN user user1 
ON studentclass.user_schoolid_faculty = user1.schoolid 
AND user1.position = 'Faculty' 
LEFT JOIN user user2 
ON studentclass.user_schoolid_student = user2.schoolid 
AND user2.position = 'Student' 

そして、もう一つ不明な点は、なぜあなたは1 INNER JOINと1 LEFT JOINを使用しますこのクエリでは?あなたのテーブルに対してaliassesを使用する必要が

1

SELECT studentclass.class_name, u1.firstname, u1.lastname 
FROM studentclass 
INNER JOIN user u1 
ON studentclass.user_schoolid_faculty = u1.schoolid 
WHERE user.position = 'Faculty' 
LEFT JOIN user u2 
ON studentclass.user_schoolid_student = u2.schoolid 
WHERE u1.position = 'Student' 
関連する問題