Я работаю над написанием запроса, который может проверять несколько строк одного и того же пользователя.Если комбинация записей одного и того же пользователя не дает необходимой мне информации (помните, что это комбинация всех записей, которые есть у пользователя, а не одной), то пользователь считается пропущенным.
Например,: Есть две таблицы.
Одна - это «пользователь», в которой хранится личная информация пользователя:
id client_id first_name last_name date_of_birth ssn address
Другая - «скрининг», в которой хранится информация о медицинских тестах пользователей:
id user_id date cholesterol ldl hemoglobin triglycerides mcv glucose
mchc ha1c plateletcount.
Один пользователь может иметь только одну запись в таблице пользователей, но может иметь несколько записей в таблице проверки.Что я хочу сделать, это проверить несколько записей скрининга пользователей, принадлежащих одному и тому же пользователю, чтобы увидеть, предоставляет ли комбинация этих записей необходимую информацию, которая мне нужна.Если нет, пользователь выбран.Например, необходимая информация включает в себя холестерин, ldl, триглицериды, глюкозу или.Если у пользователя есть две записи скрининга, одна запись содержит cholesterol(NOT NULL)
, другая - triglycerides(NOT NULL)
, glucose(NOT NULL)
и ha1c(NOT NULL)
.Он выбран, потому что лдл отсутствует.
Как мне написать запрос, который может это сделать?Я попытался внутреннее соединение, но, похоже, не работает.Здесь есть некоторые требования.Для холестерина, ldl и триглицеридов, пока один из них отсутствует, пользователь должен быть выбран.Но для глюкозы и ha1c пользователь выбирается только тогда, когда оба отсутствуют.
Один из запросов, который я пробовал, выглядит следующим образом:
SELECT users.id AS user_id, users.first_name, users.last_name, clients.name AS client,
users.social_security_number AS ssn, users.hiredate, hra.id AS hra_id, hra.date AS hra_date, hra.maileddate AS hra_maileddate,
screening.id AS screening_id, screening.date AS screening_date, screening.maileddate AS screening_maileddate
FROM users
INNER JOIN clients
ON(
users.client_id = clients.id
)
INNER JOIN hra
ON(
users.id = hra.user_id
)
LEFT JOIN screening
ON(
users.id = screening.user_id
)
WHERE users.client_id = '1879'
AND hra.date BETWEEN '2011-07-01' AND '2011-11-15'
AND hra.maileddate IS NOT NULL
AND screening.date BETWEEN '2011-05-15' AND '2011-11-15'
AND screening.maileddate IS NULL
AND screening.cholesterol IS NOT NULL
AND screening.ldl IS NOT NULL
AND screening.triglycerides IS NOT NULL
AND (screening.glucose IS NOT NULL OR screening.ha1c IS NOT NULL)
GROUP BY users.id
Какой правильный запрос?