[英]Join tables with 'condition' in RDBMS
我有3張桌子:
Persons(PersonID, PersonName, PersonAge, PersonType)
Students(StudentID (fk to Persons.PersonID), StudentRank, StudentClassID, ...)
Teachers(TeacherID (fk to Persons.PersonID), TeacherSalary, ...)
一個人只能是一種類型:學生或老師。 因此,如果我想列出所有具有該類型的人(學生或教師),我需要檢查Persons表的PersonType,然后與相應的表(學生,教師)聯接? 夠好嗎? 有人可以給我一個更好的解決方案嗎?
編輯:我使用組合:PHP + MySQL。
更新 :表的結構。
您可以使用find_in_set
不是您不需要連接兩個表:
select p.Personname
from students s,persons p
where find_in_set(s.Studentid,p.Personid)
該...
SELECT * FROM Persons JOIN Students ON Persons.PersonID = Students.StudentID
... 不會再派任何老師。
因此,您不必對PersonType
進行過濾(但是,如果它以有助於提高性能的方式進行索引,則可能需要在更復雜的情況下進行過濾)。
-編輯-
好的,因此您想將所有內容“塞滿”然后在PersonName
排序。 您可以通過用NULL仔細填充兩個子表之間的“間隙”來做到這一點:
SELECT *
FROM (
SELECT Persons.*, StudentRank, StudentClassID, NULL TeacherSalary
FROM Persons JOIN Students ON Persons.PersonID = Students.StudentID
UNION ALL
SELECT Persons.*, NULL StudentRank, NULL StudentClassID, TeacherSalary
FROM Persons JOIN Teachers ON Persons.PersonID = Teachers.TeacherID
) Q
ORDER BY PersonName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.