MySQL5.7-使用非规范化表取消分层数据集的初始化和展平

vfh0ocws  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(159)

我有两张table,预约(叫 SOAppts )和程序代码(称为 SOProccodes ). 预约表是牙科数据集的一部分,该数据集包含对患者执行的操作说明。这些引用存储在 SOAppts . codeid 柱。其中有二十列(来自 codeid1codeid20 ),其中五个可以在小提琴上看到。
http://sqlfiddle.com/#!9/9立方英尺/2 codeid 引用 SOProccodes 存储有关过程的实际信息的表。一 SOProccodes 表条目由过程代码id组成( proccodeid ),类别( category )以及描述( descript ). 一 proccodeid 也可以包含对多个其他过程代码的引用(以下称为多代码)。
多代码用a表示 category 999和 multicodeXid 可以引用其他过程代码甚至其他多代码的列。多代码最多可引用8个程序代码和/或其他多代码的混合。
有了这些信息,我怎样才能检索到这样一种信息:数据被取消插入(所有codeid列都被转移到行中),层次结构被展平,多代码引用的所有过程代码都可以在appointments表的查询中看到?我已经尝试将这些表连接在一起,但是查询很容易超出mysql的61表连接限制这一事实将这种想法抛诸脑后。

apptid  codeid1 codeid2 codeid3 codeid4
22769   1       17      783     725 
22891   1       15      55      679
22892   1       55      58      627
22893   1       783     725     18

在本例中,apptid 22769具有725的多代码。 select * from SOProccodes where proccodeid = 1, 720, 725 ```
procco descript category multinumof multicode1id multicode2id multicode3id multicode4id multicode5id
1 Periodic 1 0 0 0 0 0 0
720 Fluoride 2 0 0 0 0 0 0
725 Adult Flu 999 1 720 0 0 0 0

我想要 `720` 出现代替 `725` ,所以看起来像这样。

apptid codeid
22769 1
22769 17
22769 783
22769 720

对于引用其他多代码的多代码,我想在它们自己的行中输出所有这些代码。例如,预约22892:

22892 1 55 58 627

有一个627的过程码,这是一个多码,在常规过程码中,引用另一个622的多码 `select * from SOProccodes where proccodeid = 627, 622` ```
procco descript           category            multinumof multicode1id multicode2id multicode3id multicode4id multicode5id
622    Cont. Care - Proph 999                 3          54           17           1            0            0           
627    Cont. Care - Compr 999                 5          35           30           33           8            622

所以,它应该是这样的(proccodeid 627的所有程序代码和627的子程序代码,622)

apptid    codeid
22892   1       
22892   55      
22892   58      
22892   35           
22892   30           
22892   33           
22892    8   
22892   54
22892   17          
22892   1

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题