SQL 2 оставил внешние объединения на той же таблице - PullRequest
1 голос
/ 14 июля 2011

Я делаю 2 соединения в одной таблице и хочу получить следующие результаты:

chnl_ptnr_key type1_ky type2_ky
------------- -------- --------
1             1        null
1             2        null
1             null     3
1             null     4

Но вместо этого я получаю

chnl_ptnr_key type1_ky type2_ky
------------- -------- --------
1             1        3
1             2        3
1             2        3
1             2        4

Мой запрос:

SELECT cp.chnl_ptnr_ky, cpmap1.ky as type1_ky, cpmap2.ky as type2_ky
FROM chnl_ptnr cp
LEFT OUTER JOIN chnl_ptnr_oos_map cpmap1 on (cp.chnl_ptnr_ky = cpmap1.chnl_ptnr_ky and cpmap1.typ = 'TYPE1')
LEFT OUTER JOIN chnl_ptnr_oos_map cpmap2 on (cp.chnl_ptnr_ky = cpmap2.chnl_ptnr_ky and cpmap2.typ = 'TYPE2')
WHERE cp.chnl_ptnr_ky = '1111'

Может ли кто-нибудь помочь мне изменить этот запрос, чтобы я получал пустые значения в type1_ky и type2_ky, где строка возвращается из другого соединения? Мне нужен этот формат, потому что я пытаюсь использовать его для карты iBATIS.

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

1 Ответ

2 голосов
/ 14 июля 2011

В вашем примере результатами первых LEFT JOIN являются (1,1) и (1,2). Поскольку нет записей (1, NULL), не будет записей (1, NULL ,?) после следующих LEFT JOIN.

Возможно, вам где-то нужен СОЮЗ ...

SELECT  cp.chnl_ptnr_ky, cpmap1.ky as type1_ky,  NULL AS type2_ky
FROM chnl_ptnr cp
LEFT OUTER JOIN chnl_ptnr_oos_map cpmap1 on (cp.chnl_ptnr_ky = cpmap1.chnl_ptnr_ky and     cpmap1.typ = 'TYPE1')
WHERE cp.chnl_ptnr_ky = '1111'

UNION ALL

SELECT  cp.chnl_ptnr_ky, NULL,  cpmap2.ky as type2_ky
FROM chnl_ptnr cp
LEFT OUTER JOIN chnl_ptnr_oos_map cpmap2 on (cp.chnl_ptnr_ky = cpmap2.chnl_ptnr_ky   and      cpmap2.typ = 'TYPE2')
WHERE cp.chnl_ptnr_ky = '1111'
...