我们的数据库结构如下:
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
然后我们有标签表
Tag_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 | Area 801 | Process 802 | Other1 803 | Other2 804 | Other3 805 | Other4 806 | Other5 807 | Other6
cnsmr_accnt可以有多个标签。区域和流程标记是独占的,帐户只能包含其中一个。但是其他类型的标签是非排他性的,并且帐户可以具有许多这些标签。
我正在尝试创建一个查询来显示数据,如下所示:
CNSMR_ACCNT_ID |AREA_TAG | PROCESS TAG | OTHER TAGS 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
有关如何执行此操作的任何建议吗?
答案 0 :(得分:0)
您可以使用左连接的查询,如下所示:
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' )