SQL Inner-join με 3 πίνακες;
Προσπαθώ να ενώσω 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
Μπορείτε να κάνετε τα εξής (υποθέτω για τα πεδία των πινάκων, κ.λπ.)
Με βάση το αίτημά σας για πολλαπλές αίθουσες θα μπορούσατε να το κάνετε με αυτόν τον τρόπο. Απλά κάνετε join στον πίνακα Hall πολλαπλές φορές για κάθε id προτίμησης δωματίου:
Αν έχετε 3 πίνακες με το ίδιο "ID" που πρέπει να ενωθούν, νομίζω ότι θα είναι κάπως έτσι:
Απλά αντικαταστήστε το
*
με αυτό που θέλετε να πάρετε από τους πίνακες.Χρειάζεστε απλώς μια δεύτερη εσωτερική σύνδεση που συνδέει τον "αριθμό ταυτότητας" που έχετε τώρα με τον "αριθμό ταυτότητας" του τρίτου πίνακα. Στη συνέχεια, αντικαταστήστε τον
ID Number
με τοHall Name
και voilá :)