需要此查詢的一些幫助。我試圖創建一個查詢選擇所有父母的細節,我有另一個表來附加稱爲家庭。我遇到的問題是Family表包含FamilyListID字段,其中包含通過回車分隔的瞳孔和父母的主鍵。當然,可能會有幾個身份證,因爲學生可能有兄弟姐妹,所以這些都存儲在這個領域。我可以在sql中進行多鍵連接嗎?
有沒有一種方法可以加入多個Pupil.pk_PupilID,Father.pk_PersonID,Mother.pk_PersonID與Family.FamilyListID相關,記住根據情況可能不存在Father.pk_PersonID或Mother.pk_PersonID的學生。希望這是有道理的 - 我知道在家庭和學生之間需要有一個真實的聯結表,但這是我目前必須合作的結構。
SELECT
Pupil.pk_PupilID, Pupildata.Title, Pupildata.Forename,
Pupildata.Surname, Pupildata.PreferredForename,
father.pk_PersonID, father.Title, father.Forename, father.Surname,
mother.pk_PersonID, mother.Title, mother.Forename, mother.Surname,
Pupil.Form,
Address.Address1, Address.Address2, Address.TownCity, Address.Postcode,
Address.Country, Address.County
FROM
Pupil
LEFT JOIN
PERSON AS Pupildata ON Pupil.pk_PupilID = Pupildata.pk_PersonID
LEFT JOIN
RELATION AS rfather ON Pupil.pk_PupilID = rfather.fk_PersonID
LEFT JOIN
PERSON AS father ON rfather.fk_RelatedPersonID = father.pk_PersonID
LEFT JOIN
RELATION AS rmother ON Pupil.pk_PupilID = rmother.fk_PersonID
LEFT JOIN
PERSON AS mother ON rmother.fk_RelatedPersonID = mother.pk_PersonID
LEFT JOIN
PERSONADDRESS AS pa ON Pupil.pk_PupilID = pa.fk_PersonID
LEFT JOIN
ADDRESS ON pa.fk_AddressID = Address.pk_AddressID
WHERE
Pupil.pk_PupilID IN ('" & pks & "')
AND rfather.Relationship IN ('Father', 'Stepfather')
OR rmother.Relationship IN ('Mother', 'Stepmother')
AND Address.PrimaryAddress = 1
ORDER BY
Pupildata.Forename ASC
將它們全部交叉,並移動where子句的約束 - 大多數數據庫將做正確的事情,而不是實際運行交叉連接 –
我不得不說,這實際上聽起來像是數據庫設計的問題。在一個單獨的文本字段中有多個鍵,由回車分隔,完全破壞了數據庫的用途。似乎更好的辦法是建立一個關係表,將個人與所有家庭成員聯繫起來,或者可能只有一個家庭成員關係表。 因此,我會在Person表上放置一個Family ID,而不是在Family表的列上放置多個Person ID。 –
那麼所有的時間結構是一個肯定的輸家,所以我現在就解決它。沒有任何理由將數據存儲在字段中帶回車符的行中,然後想要拉出部分以與其他表進行比較。 – HLGEM