прошло довольно много времени с тех пор, как мне пришлось писать SQL в последний раз. Я борюсь с выбором, и я надеялся, что вы можете указать, что мне не хватает.
У меня довольно простая структура таблиц с двумя таблицами:
- Пользователи
- Оценки
- user_id
- оценка
- estimation_date
Цель состоит в том, чтобы использовать начальную и конечную дату, чтобы показать все оценки всех пользователей. Для пользователей, у которых нет оценки для этого конкретного временного диапазона, я хочу, чтобы SQL возвращал мне нулевое значение.
В действительности задействовано еще несколько таблиц и столбцов, а также некоторые роли пользователя, но в этом примере это не обязательно.
Я попытался настроить свой выбор следующим образом:
SELECT a.id, a.name, b.estimate, b.estimation_date
FROM users a
LEFT OUTER JOIN estimates b on a.id = b.id
WHERE b.estimation_date BETWEEN $startdate AND $enddate OR b.estimation_date IS NULL
Пока пользователь вообще ничего не оценил, результат - то, что я хочу. Каждая строка является пользователем, один и тот же пользователь может встречаться несколько раз - по одному разу для каждой оценки в диапазоне дат - и пользователь без оценки имеет значение NULL в b.estimate и b.esvaluation_date.
Однако, как только пользователь сделал оценку, даже если она не находится в пределах диапазона, он больше не отображается в результате.
Каково было бы наилучшее решение для ввода даты начала и окончания и получения для всех пользователей, и для каждого пользователя, который не имеет оценки в этом диапазоне, значение NULL в этих столбцах?