Ik denk dat ik begrijp wat je probeert te doen. Er is meer dan één manier om een kat te villen, maar mag ik voorstellen je zoekopdracht in twee afzonderlijke zoekopdrachten te splitsen en vervolgens de gecompliceerde WHERE-clausule te vervangen door een paar inner joins? Dus zoiets als dit:
/* Find connections based on health care */
SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
FROM person p
JOIN health_case hc on hc.patient = p.p_id
JOIN health_case hc2 on hc2.doctor = hc.doctor and hc2.healthcenter = hc.healthcenter and hc.start <= hc2.end and hc.end >= hc2.start and hc2.patient <> hc.patient
JOIN person p2 on p2.p_id = hc2.patient and p2.p_id <> p.p_id
WHERE p.p_id = :id
Maak vervolgens een aparte query om verbanden te krijgen op basis van opleiding:
/* Find connections based on education */
SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
FROM person p
JOIN education e on e.pupil = p.p_id
JOIN education e2 on e2.school = e.school and e2.start <= e.end AND e2.end >= e.start and e.pupil <> e2.pupil
JOIN person p2 on p2.p_id = e2.pupil and p2.p_id <> p.p_id
WHERE p.p_id = :id
Als u echt wilt dat de gegevensresultaten worden gecombineerd, kunt u UNION
. gebruiken aangezien beide zoekopdrachten dezelfde kolommen uit de persoonstabel retourneren.