【问题标题】:SQL 2 left outer joins on same tableSQL 2 左外连接在同一张表上
【发布时间】:2011-07-14 14:46:16
【问题描述】:

我在同一张表上进行 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 地图。

非常感谢

【问题讨论】:

  • chnl_ptnrchnl_ptnr_oos_map 的架构是什么?
  • 非常神秘的名称,不提供表格的数据。

标签: sql join left-join outer-join


【解决方案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'

【讨论】:

  • 啊,谢谢 - 我之前尝试过类似的东西,但我错过了 null 作为列名部分。
  • @ender:如果它对您有用,请正式考虑accepting 这个答案。也请在您的其他问题中做同样的事情。
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多