Это сложно объяснить, поэтому я сделаю все возможное.
У меня есть таблица, состоящая из строк по умолчанию (отмеченных NULL
specificSiteID
) и переопределенных строк (отмеченных NON- NULL
specificSiteID
с.)
Оба типа строк используют genericID
для определения загружаемых данных - иногда для некоторых данных могут не быть значения по умолчанию.
edit 1: Non-null specificSiteID
s, на которые я ссылаюсь, переопределяет значение по умолчанию, только когда их siteID совпадает с тем, для которого я запрашиваю.Я не применяю все переопределения к одному значению по умолчанию - я применяю только переопределение specificSiteID
к значению по умолчанию. end edit 1
У меня есть четыре требования к этому запросу:
- Не возвращать данные, если нет ни переопределения по умолчанию, ни переопределения для строки.
- Возвращает данные переопределения, когда нет данных по умолчанию
- Возвращает данные переопределения, перезаписывая данные по умолчанию, где данные переопределения не равны нулю
- и, наконец, возвращает только данные по умолчанию, когдаон существует, и данные переопределения отсутствуют.
Прямо сейчас мой SQL-запрос выглядит так: *
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
COALESCE(override.Col2, default.Col2) as Col2
FROM
(SELECT * from tableA where
genericID = 84 AND
specificSiteID IS NULL ) as default
LEFT JOIN
(SELECT * from tableA where
genericID = 84 AND
specificSiteID = 34 ) as override
ON default.genericID = override.genericID;
Проблема этого сценария заключается в том, что в случае сбоя № 2 из-заLEFT JOIN
. Когда по умолчанию нет строки для LEFT JOIN
, строка переопределения не включается. Используя приведенный выше пример, если нет genericID
= 84, где specificSiteID
равно NULL
, данные отсутствуютвозвращается, даже если есть переопределенные данные.
Что за JOIN
я ищу?Могу ли я даже покрыть это JOIN
?