Προσπαθώ να ενώσω 3 πίνακες σε μια προβολή:
Έχω έναν πίνακα που περιέχει πληροφορίες για τους φοιτητές που κάνουν αίτηση για να ζήσουν σε αυτό το πανεπιστήμιο. Έχω έναν άλλο πίνακα που παραθέτει τις προτιμήσεις αίθουσας (3 από αυτές) για κάθε φοιτητή. Αλλά κάθε μία από αυτές τις προτιμήσεις είναι απλώς ένας αριθμός ταυτότητας, και ο αριθμός ταυτότητας έχει ένα αντίστοιχο όνομα αίθουσας σε έναν τρίτο πίνακα (δεν σχεδίασα αυτή τη βάση δεδομένων...).
Λίγο πολύ, έχω INNER JOIN
στον πίνακα με τις προτιμήσεις τους, και τα στοιχεία τους, το αποτέλεσμα είναι κάτι σαν...
John Doe | 923423 | Incoming Student | 005
Όπου "005" θα είναι το "HallID". Τώρα λοιπόν θέλω να ταιριάξω αυτό το HallID
με έναν τρίτο πίνακα, όπου αυτός ο πίνακας περιέχει ένα HallID
και ένα HallName
.
Οπότε λίγο πολύ, θέλω το αποτέλεσμά μου να είναι σαν...
John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
Εδώ είναι αυτό που έχω αυτή τη στιγμή:
SELECT
s.StudentID, s.FName,
s.LName, s.Gender, s.BirthDate, s.Email,
r.HallPref1, r.HallPref2, r.HallPref3
FROM
dbo.StudentSignUp AS s
INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r
ON s.StudentID = r.StudentID
INNER JOIN HallData.dbo.Halls AS h
ON r.HallPref1 = h.HallID
Μπορείτε να κάνετε τα εξής (υποθέτω για τα πεδία των πινάκων, κ.λπ.)
SELECT s.studentname
, s.studentid
, s.studentdesc
, h.hallname
FROM students s
INNER JOIN hallprefs hp
on s.studentid = hp.studentid
INNER JOIN halls h
on hp.hallid = h.hallid
Με βάση το αίτημά σας για πολλαπλές αίθουσες θα μπορούσατε να το κάνετε με αυτόν τον τρόπο. Απλά κάνετε join στον πίνακα Hall πολλαπλές φορές για κάθε id προτίμησης δωματίου:
SELECT s.StudentID
, s.FName
, s.LName
, s.Gender
, s.BirthDate
, s.Email
, r.HallPref1
, h1.hallName as Pref1HallName
, r.HallPref2
, h2.hallName as Pref2HallName
, r.HallPref3
, h3.hallName as Pref3HallName
FROM dbo.StudentSignUp AS s
INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r
ON s.StudentID = r.StudentID
INNER JOIN HallData.dbo.Halls AS h1
ON r.HallPref1 = h1.HallID
INNER JOIN HallData.dbo.Halls AS h2
ON r.HallPref2 = h2.HallID
INNER JOIN HallData.dbo.Halls AS h3
ON r.HallPref3 = h3.HallID
Αν έχετε 3 πίνακες με το ίδιο "ID" που πρέπει να ενωθούν, νομίζω ότι θα είναι κάπως έτσι:
SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID
Απλά αντικαταστήστε το *
με αυτό που θέλετε να πάρετε από τους πίνακες.