Я потратил несколько дней, пытаясь понять это, но безуспешно!
У меня есть таблицы так:
user:
id, name
event:
id
userId
startAt
endAt
Как написать запрос, который получит все пользователи, которые:
- события не назначены
- или имеют события, которые имеют начало и конец (завершены)
- и нет событий, которые не имеют endAt
- Это может быть описано как доступные пользователи.
Вот моя (неудачная) попытка:
SELECT *
FROM user
LEFT JOIN event ON user.id = event.userId
WHERE
startAt IS NOT NULL AND endAt IS NOT NULL
OR event.userId IS NULL
Вот скрипка sql
http://sqlfiddle.com/#!9/aa55cd
Приведенный выше запрос должен вернуть 3 пользователей. Пользователь с идентификатором 1 должен быть пропущен, так как он. есть событие без даты окончания.