SQL соединяет таблицу A, столбец A, с таблицей B, столбцом A или B

У меня есть 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?

Пример иллюстрации данных:

Посмотреть скриншот

Пожалуйста, не загружайте изображения кода/ошибок/примеров данных, когда задаете вопрос.. Вместо этого вставьте свои образцы данных в виде текста в свой запрос.
Thorsten Kettner 16.03.2022 12:53
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Столбцы под названием 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 как условие присоединения. Насколько я понимаю, функция объединения работает только в том случае, если мы имеем дело с нулями?

Zebo3k 16.03.2022 16:39

Такого никогда не должно быть. Идентификатор должен иметь внешний ключ к таблице, на которую он ссылается, поэтому столбец никогда не может содержать идентификатор, которого нет в другой таблице. Он может содержать только действительный идентификатор или нуль. Возможно, вы захотите пересмотреть свою модель данных. Так что да, COALESCE работает только с нулями, но это должно быть все, что необходимо в таком запросе.

Thorsten Kettner 16.03.2022 17:40

Другие вопросы по теме