Oracle SQL: как объединить таблицы, содержащие значения ALL / Wildcard? - PullRequest
0 голосов
/ 16 ноября 2018

Я надеюсь, что вы можете помочь мне со следующим: -)

Давайте сделаем это просто: У меня есть таблица_A, содержащая

COUNTRY, ACCOUNT, PRODUCT AND ORIGIN

и таблица_B, содержащая

COUNTRY, ACCOUNT, PRODUCT, ORIGIN and TARIFF

Моя проблема заключается в том, что каждый столбец таблицы table_B, за исключением COUNTRY, может содержать значение «ALL», что означает, что тариф применяется ко всем учетным записям, продукту или источнику. Посмотреть изображение ...

Example of Table_b

Как использовать условное объединение, чтобы использовать или пропустить объединение на основе значений 'ALL'? Чтобы получить тариф для данных Table_A ??

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Может быть, это может помочь:

SELECT A.*, B.TARIFF 
FROM table_A A, table_B B
    WHERE  ( B.COUNTRY = 'ALL' OR (B.COUNTRY = A.COUNTRY) )
    AND    ( B.ACCOUNT = 'ALL' OR (B.ACCOUNT = A.ACCOUNT) )
    AND    ( B.PRODUCT = 'ALL' OR (B.PRODUCT = A.PRODUCT) )
    AND    ( B.ORIGIN  = 'ALL' OR (B.ORIGIN  = A.ORIGIN ) )

Тогда все зависит от того, как определены ваши таблицы (первичные ключи, уникальные ключи ..).Это означает, что в зависимости от структуры таблиц и данных у вас может быть несколько дублированных тарифов для одной записи из таблицы _A.

0 голосов
/ 16 ноября 2018

Используйте AND, OR и скобки в предложении WHERE.

select *
from table_a a
join table_b b on a.country = b.country
               and (a.account = b.account or b.account = 'ALL')
               and (a.product = b.product or b.product = 'ALL')
               and (a.origin  = b.origin  or b.origin  = 'ALL');
...