2011-07-14 30 views
1

我做2在同一个表连接,我想下​​面的结果:SQL 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_kytype2_ky该行是从其他连接返回的? 我需要这种格式,因为我试图将它用于iBATIS地图。

非常感谢

+0

你是什么架构'chnl_ptnr'和'chnl_ptnr_oos_map'? –

+0

非常神秘的名字,并没有提供表格的数据。 – GarfieldKlon

回答

1

在您的例子,第一LEFT JOIN的结果是(1,1)和(1,2)。由于没有(1,NULL)记录,所以在下一个LEFT JOIN之后将不会有(1,NULL ,?)记录。

你可能需要一个UNION在那里的某个地方......

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' 
+0

啊这工作谢谢 - 我在尝试类似的东西,但我错过了作为列名部分空。 – ender

+0

@版:如果它对你有用,请正式考虑[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)这个答案。另外请在你的其他问题上也这样做。 –