【问题标题】:Create a view of an account showing hierarchy of tags创建显示标签层次结构的帐户视图
【发布时间】:2015-06-26 14:01:10
【问题描述】:

我们的数据库结构如下:

Cnsmr_accnt_tag 表

cnsmr_accnt_id | Tag_id 12345 | 614 12345 | 615 12345 | 741 12345 | 989 12345 | 901 12352 | 614 12352 | 675 12352 | 314 12352 | 989 12370 | 789 12370 | 412 13270 | 142 13270 | 326 13270 | 391 13270 | 469

然后我们有标签表

标签_ID | Tag_typ_ID 614 | 800 615 | 801 第741章802 989 | 803 第675章801 第789章800 412 | 801 142 | 802 314 | 802 326 | 807 391 | 802 901 | 805 第469章804

终于有了 Tag_typ 表

Tag_typ_id | Tag_typ_shrt_nm 800 |区域 801 |过程 802 |其他1 803 |其他2 804 |其他3 805 |其他4 806 |其他5 807 |其他6

cnsmr_accnt 可以有多个标签。区域和进程标签是独占的,一个帐户只能拥有其中之一。但是其他类型的标签是非排他性的,一个帐户可以拥有许多这样的标签。

我正在尝试创建一个查询来显示如下数据:

CNSMR_ACCNT_ID |AREA_TAG |工艺标签 |其他标签 12345 |614 | 615 | 741 12345 |614 | 615 | 989 12345 |614 | 615 | 901 12352 |614 |第675章314 12352 |614 |第675章989 12370 |789 | 412 | 142 12370 |789 | 412 | 326 12370 |789 | 412 | 391 12370 |789 | 412 | 469

关于如何做到这一点的任何建议?

【问题讨论】:

  • 这看起来像一个标准(内部)连接,可能需要添加一个 distinct 和一个 order by 但就是这样。不清楚哪一列代表什么,area_tag、process_tag和other_tags在哪里?

标签: sql join hierarchy


【解决方案1】:

您可以使用带有左连接的查询,如下所示:

SELECT * 
FROM   cnsmr_accnt_tag c 
   LEFT JOIN (tag ta 
              LEFT JOIN tag_type tta 
                     ON tta.tag_typ_id = ta.tag_typ_id) 
          ON c.tag_id = ta.tag_id 
             AND tta.tag_typ_shrt_nm = 'PROCESS' 
   LEFT JOIN (tag tb 
              LEFT JOIN tag_type ttb 
                     ON ttb.tag_typ_id = tb.tag_typ_id) 
          ON c.tag_id = tb.tag_id 
             AND ttb.tag_typ_shrt_nm = 'AREA' 
   LEFT JOIN (tag tc 
              LEFT JOIN tag_type ttc 
                     ON ttc.tag_typ_id = tc.tag_typ_id) 
          ON c.tag_id = tc.tag_id 
             AND ttc.tag_typ_shrt_nm NOT IN ( 'AREA', 'PROCESS' )  

【讨论】:

  • 感谢您的推荐。我对您的代码做了一些小改动并运行它,但没有返回任何内容。
  • 已编辑查询以使用左连接,因为数据可能没有所有标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多