У меня есть пара таблиц, одна с исходными данными, которую я назову SourceData
, и другой, который определяет переопределенные значения для данного пользователя, если они существуют, называется OverriddenSourceData
.MySQL left join со значениями по умолчанию
Основной формат таблицы выглядит это как:
SourceData
| source_id | payload |
--------------------------------
| 1 | 'some json' |
| 2 | 'some more json' |
--------------------------------
OverriddenSourceData
| id | source_id | user_id | overrides
| 1 | 2 | 4 | 'a change' |
------------------------------------------
Для данного пользователя, я хотел бы вернуть все строки Источник данных с overrides
колонка включена. Если пользователь переопределил источник, тогда заполняется столбец, иначе он равен нулю.
Я начал с выполнения соединения слева, а затем в том числе условия для проверки пользователя, как так:
SELECT A.source_id, A.payload, B.overrides from SourceData A
LEFT JOIN OverriddenSourceData B
ON A.source_id = B.source_id
WHERE user_id = 4
но исходные строки, которые не были переопределены, не будут включены (он вел себя как внутреннее соединение) (например, идентификатор источника 1)
Затем я расслабил запрос и использовал строчное левое соединение на source_id
.
SELECT A.source_id, A.payload, B.overrides from SourceData A
LEFT JOIN OverriddenSourceData B
ON A.source_id = B.source_id
# WHERE user_id = 4
Это может возвращать больше данных, чем мне нужно, хотя (например другие пользователи, которые переопределены те же исходные данные), а затем я должен фильтровать программно.
Кажется, что я должен обработать запрос, который делает все это на уровне БД и дает мне то, что мне нужно. Любая помощь?
Изменить ГДЕ И – Strawberry