Я пытаюсь создать логику соединения из двух таблиц, в которых мне нужно выбрать условие соединения, если это выполняется способом «соединение по столбцу 1, если не объединено - по столбцу 2, если не объединено - по столбцу 3». У меня проблемы с его сборкой простым способом.
Просто, чтобы дать некоторое представление, я пытаюсь найти все продукты, на которые распространяется контракт. Иногда продукты явно упоминаются в ProductId, но если соединение не удается (так как был указан неправильный ProductId), я хочу использовать название бренда, чтобы найти все продукты под этим брендом и предположить, что все они подпадают под действие договора. Соответствие торговой марки будет менее точным, поэтому я хочу использовать его только в том случае, если не смог найти подходящую продукцию по ProductId.
Для иллюстрации представьте, что у меня есть две таблицы: Prosucts, со столбцами ProductId и BrandName; также таблица Контракты с таблицей ContractId, Brand, ProductId, Value. Для этой таблицы ProductId и Brand могут быть нулевыми или иметь значения, не указанные в Products.
Я хочу присоединиться к Контрактам с такими продуктами, что:
- Попробуйте присоединиться слева, где Contracts.ProductId = Products.ProductId
- Для тех записей в Контрактах, где присоединение не было успешным, присоединитесь к Продуктам, где Contracts.Brand = Products.Brand
- Если оба условия соединения были неудачными - вернуть null
Есть ли способ сделать эту последовательную логику соединения, при которой условия соединения пробуются одно за другим? Просто чтобы подчеркнуть, у меня есть более двух условий присоединения в реальности. Спасибо!
Пример данных:
Контракты:
ContractId Brand ProductId
C1 Mars P1
C2 Nestle P2
C3 PepsiCo P3
Продукты:
ProductId Brand
P1 NULL
P2 Mars
P4 PepsiCo
P5 PepsiCo
Ожидаемый результат
ContractId ProductId
C1 P1
C2 P2
C3 P4
C3 P5