このクエリのヘルプが必要です。私はすべての親の詳細を選択するクエリを作成しようとしているし、私は別のテーブルを持っていると呼ばれるファミリー。私が持っている問題は、Familyテーブルには、瞳孔と親の主キーがキャリッジリターンで区切られたFamilyListIDフィールドが含まれているということです。もちろん、生徒は兄弟を持つかもしれないので、そこにはいくつかのIDがあるかもしれないので、これはすべてこのフィールドに格納されています。sqlでマルチキー結合を実行できますか?
Family.FamilyListIDに関連するmulti Pupil.pk_PupilID、Father.pk_PersonID、Mother.pk_PersonIDに参加する方法はありますか?状況に応じて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 IDを持つのではなく、PersonテーブルにFamily IDを設定します。 –
その構造はすべての時間のために確かな敗者なので、今私はそれを修正するだろう。フィールド内にキャリッジリターンを持つ行にデータを格納し、他のテーブルと比較するために部品を引き出したいという理由はありません。 – HLGEM