【问题标题】:Self Join Table To Produce The Output MSSQL自联接表生成输出 MSSQL
【发布时间】:2018-03-15 15:47:17
【问题描述】:

您能否帮助从下面的输入表中生成输出表(提供了屏幕截图。基本上我需要根据每行中的 pid 从 cn 中获取 pcn。我使用了 case when 语句,但数据是巨大的,这不是一种可持续的方式,因此自我加入会很好。但我没有从下面的自我加入查询中得到预期的输出

这是我尝试的自联接查询。

select b.id, b.cn, a.pid, a.cn as pcn 
from ( 
   (select pid,cn from categories) a 
   left join (select id,cn from categories) b on a.pid=b.id 
) 

这是我用来为某些数据导出数据的case语句

select id,cn,pid,
       case 
          when pid is NULL then cn 
          when pid=1 then (select cn from categories where id=1) 
          when pid=13 then (select cn from categories where id=13) 
       END as pcn 
from categories

【问题讨论】:

  • 请不要使用图片,并将您的查询放在问题中,而不是在评论中:)
  • 不相关,但是:您不需要嵌套子选择来连接表。您的第一个查询可以简化为from categories a left join categories b on a.pid = b.id
  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloraclesql-serverdb2、...
  • 是的,你是对的..我应该避免从表中选择子来加入它。我还为数据库产品添加了标签。
  • @Liora Haydont:我无法以表格格式粘贴数据,这就是添加图像的原因。但是查询已添加到问题本身。谢谢

标签: sql-server join self


【解决方案1】:

我想这就是你想要的:

SELECT i.id, i.cn, i.pid, c.cn
FROM inputTable i
    LEFT OUTER JOIN categories c ON (i.pid = c.id)

【讨论】:

  • 完全正确..但必须如下更改以处理 NULL 列。如果 pid 为空,则应采用 i.cn SELECT i.id, i.cn, i.pid, case当 i.pidis null then i.cn else c.cn end as pcn FROM inputtable i LEFT OUTER JOIN categories c ON (i.pid= c.id)
【解决方案2】:
select
  i.id,
  i.cn,
  i.pid,
  i2.cn as pcn
from input_table i
  left join input_table i2
    on i.pid=i2.id

【讨论】:

  • 完全正确。非常感谢..但必须按以下方式进行更改以处理 NULL 列。如果 pid 为空,则应采用 i.cn SELECT i.id, i.cn, i. pid, case when i.pidis null then i.cn else i2.cn end as pcn FROM inputtable i LEFT OUTER JOIN inputtable i2ON (i.pid= i2.id)
【解决方案3】:

下面的查询可以给我确切的预期结果。感谢 Jaime、jhilden 和 a_horse_with_no_name SELECT
i.id, i.cn,
i.pid,如果 i.pid 为 null 则 i.cn 否则 i2.cn 以 pcn 结尾
FROM inputtable i LEFT OUTER JOIN inputtable i2 ON (i.pid= i2.id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2012-01-17
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多