Как использовать оператор CASE с JOIN - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь использовать оператор соединения, который зависит от определенных операторов.Когда поле lane.dest_postal_code_prefix имеет значение NOT NULL, тогда я хочу, чтобы объединение было похоже на первый блок кода ниже.Если поле lane.dest_postal_code_prefix имеет значение NULL, тогда я хочу, чтобы соединение было как второй блок кода ниже.(Обратите внимание на разницу в условиях ON между двумя случаями)

Мне нужна помощь в добавлении оператора case в предложение join.

--WHEN lane.dest_postal_code_prefix is NOT NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    AND
    SUBSTRING( A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix ) ) = 
    lane.dest_postal_code_prefix
        )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;

--WHEN lane.dest_postal_code_prefix is NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;

1 Ответ

1 голос
/ 26 июня 2019

Вы можете использовать одно предложение ON следующим образом:

ON
(
A.customer_country = lane.dest_country_code
AND
COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = CASE 
  WHEN lane.dest_postal_code_prefix IS NOT NULL THEN lane.dest_postal_code_prefix 
  ELSE COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')
END
)

Во 2-м случае (остальная часть) условие всегда выполняется, потому что оно:

COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')

так что единственное фактическое условие -

A.customer_country = lane.dest_country_code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...