Получение помощи в сложном запросе для MySQL - PullRequest
2 голосов
/ 13 декабря 2011

с этой частью схемы

Doctor(licence_no, doctor_name, specialty)

Patient(pat_id, pat_name, pat_address, pat_phone, date_of_birth)

Visit(licence_no, pat_id, date, type, diagnosis, charge)

и я хочу получить имена всех пациентов, которые посетили всех врачей я сделал это следующим образом

SELECT p.pat_name FROM Patient p

INNER JOIN Visit v ON (v.pat_ID = p.pat_ID)

INNER JOIN Doctor d ON (d.licence_no = v.licence_no)

WHERE (SELECT d.licence_no FROM Doctor d) = (SELECT v.licence_no FROM Visit v2 WHERE 

p.pat_ID =v.pat_ID)

но есть ошибка, поскольку подзапрос возвращает более 1 значения, и я должен убедиться, что этот пациент посещал всех врачей, какие-либо предложения, чтобы это сделать?

1 Ответ

3 голосов
/ 13 декабря 2011

Чтобы убедиться, что пациент посещал всех врачей, вы можете сравнить различное количество врачей (license_no) с количеством license_no, сгруппированным по pat_id в Visit.

Нечто подобное может сделать эту работу:

SELECT pat_name
FROM Patient p JOIN Visit v ON p.pat_id = v.pat_id
GROUP BY v.pat_id 
HAVING COUNT(DISTINCT v.license_no) = (SELECT COUNT(license_no) FROM Doctor);

Идея здесь состоит в том, чтобы просто проверить, что если, например, в Doctor есть 5 врачей, пациент посещал 5 различных врачей в Visit.

Это, конечно, не проверено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...