У меня есть 2 таблицы - таблица расходов и таблица продаж.
Схема таблицы расходов: Spend_ID, Spend_amount
Схема таблицы продаж: Продажи_ID_A, Продажи_ID_B, Объем продаж
Я хочу сделать левое соединение таблицы расходов с таблицей продаж. Ключом соединения из таблицы расходов является Spend_ID, и я хочу присоединиться, когда он соответствует значению либо в Sales_ID_A, либо в Sales_ID_B, т. е. мой ключ соответствия в таблице продаж находится в 2 столбцах. Таким образом, это похоже на применение условия «или» к соединению в таблице продаж Sales_ID_A или Sales_ID_B. Если совпадение найдено в Sales_ID_A, то нет необходимости проверять Sales_ID_B. Проверяйте Sales_ID_B только в том случае, если в Sales_ID_A не найдено совпадений. Как мне добиться этого с помощью SQL?
Пример иллюстрации данных:
Столбцы под названием sales_id_a
и sales_id_b
на самом деле являются идентификаторами расходов, и их лучше называть spend_id_a
и spend_id_b
.
Вы хотите присоединиться к первому идентификатору, но если он равен нулю, вы хотите присоединиться ко второму идентификатору. Используйте COALESCE
для этого:
select *
from sales
left join spend on spend.spend_id = coalesce(sales.sales_id_a, sales.sales_id_b)
Большое спасибо. Однако как мы напишем запрос, если значение sales_id_a является «ненулевым» значением, которое не совпадает, а затем мы хотим проверить sales_id_b, чтобы увидеть, есть ли совпадение, и, следовательно, выполнить соединение на основе этого? Извинения - я должен был быть более ясным в своем первоначальном посте. но sales_id_a и sales_id_b могут включать ненулевые значения. я хочу сказать, что если sales_id_a совпадает, присоединяйтесь на основе этого. если нет, отметьте sales_id_b как условие присоединения. Насколько я понимаю, функция объединения работает только в том случае, если мы имеем дело с нулями?
Такого никогда не должно быть. Идентификатор должен иметь внешний ключ к таблице, на которую он ссылается, поэтому столбец никогда не может содержать идентификатор, которого нет в другой таблице. Он может содержать только действительный идентификатор или нуль. Возможно, вы захотите пересмотреть свою модель данных. Так что да, COALESCE
работает только с нулями, но это должно быть все, что необходимо в таком запросе.