2016-05-19 12 views
0

次のクエリが動作しますが、今は止まっています。私はさらに2つのフィルタを追加したいと思いますし、これをどうやって行うのかについてはあまりよく分かりません。テーブル関係では、私は関係というフィールドを持っています。返された父親のデータに、そのフィールドに父親か義父がいるかどうかを確認する必要があります。同様に私は母親のデータがStepmother、motherによってフィルタリングされる必要があります。もちろん、生徒には父親や母親がいない可能性がありますが、親が1人いる場合はデータが返されます。これまでクエリにフィルタを追加する

SELECT DISTINCT p.pk_PupilID, pn.Title, pn.Forename, pn.Surname, pn.PreferredForename, father.pk_PersonID, father.Title, father.Forename, father.Surname, mother.pk_PersonID, mother.Title, mother.Forename, mother.Surname, pn.DoB, pn.Gender, h.House, p.Form, p.BoardingStatus, p.Tutor, h.Housemaster , f.Salutation 
FROM Family AS f 
LEFT JOIN RELATION AS rpupil ON f.pk_FamilyID = rpupil.fk_FamilyID 
LEFT JOIN PUPIL AS p ON rpupil.fk_PersonID = p.pk_PupilID 
LEFT JOIN PERSON AS pn ON p.pk_PupilID = pn.pk_PersonID 
LEFT JOIN HOUSE AS h ON p.fk_DepartmentID = h.fk_DepartmentID 
LEFT JOIN RELATION AS rfather ON p.pk_PupilID = rfather.fk_PersonID 
LEFT JOIN PERSON AS father ON rfather.fk_RelatedPersonID = father.pk_PersonID 
LEFT JOIN RELATION AS rmother ON p.pk_PupilID = rmother.fk_PersonID 
LEFT JOIN PERSON AS mother ON rmother.fk_RelatedPersonID = mother.pk_PersonID 
WHERE p.pk_PupilID IN('" & pks & "') 
+1

あなたはあなたの 'WHERE'節によって' LEFT JOIN'を殺しています。これは効果的に「INNER JOIN」に変換されます。 'LEFT JOIN'の右側の表(または' RIGHT JOIN'の左側の表)のそれ以上のフィルタリングは、 'ON'節条件に追加する必要があります。 – Siyual

答えて

1

書式付きのコメントを。

WHERE p.pk_PupilID IN('" & pks & "') 
AND rmother.Relationship IN('Mother','Stepmother') 
OR rfather.Relationship IN('Father','Stepfather') 

は、次のように処理されます:

WHERE (
    p.pk_PupilID IN('" & pks & "') 
AND rmother.Relationship IN('Mother','Stepmother') 
    ) 
OR rfather.Relationship IN('Father','Stepfather') 

あなたのの一部を定義するために括弧()を使用する必要がありますについてOR ...

これを注意する

一つのことWHERE句をORに適用する:

WHERE p.pk_PupilID IN('" & pks & "') 
AND (
    rmother.Relationship IN('Mother','Stepmother') 
OR rfather.Relationship IN('Father','Stepfather') 
    ) 

この方法であなたのOR句のオプションの両方がまたとにかくWHERE p.pk_PupilID IN('" & pks & "')

を履行する必要がありますが、私はこれは実際にあなたの問題を解決するかどうかを知るための十分な情報を持っていません。いくつかのデータ例は、何が返ってくるべきか、そうでないべきかを知るために役立ちます。

-1

作業

WHERE p.pk_PupilID IN('" & pks & "') AND rmother.Relationship IN('Mother','Stepmother') OR rfather.Relationship IN('Father','Stepfather') 

コード次の4つの「親」の値のいずれかが、あなたは、この使用することができ移入されることを確実にわかっている場合:ここ

where(p.pk_PupilID IN('" & pks & "') AND rmother.Relationship IN('Mother','Stepmother')) or (p.pk_PupilID in('" & pks & "') AND rfather.Relationship IN('Father','Stepfather')) 
関連する問題