我有两个表,约会(称为SOAppts
)和过程代码(称为SOProccodes
)。约会表是牙科数据集的一部分,其中包含有关对患者进行的操作的说明。这些引用存储在SOAppts
。codeid
列中。这些列中有20列(从codeid1
到codeid20
),在小提琴中可以看到其中的五列。
http://sqlfiddle.com/#!9/9cfef0/2
codeid
引用SOProccodes
表,该表存储有关该过程的实际信息。 SOProccodes
表条目由过程代码ID(proccodeid
),类别(category
)和描述(descript
)组成。 proccodeid
也可以包含对多个其他过程代码(以下称为多代码)的引用。
多代码由999的category
表示,并且multicodeXid
列中的条目可以引用其他过程代码或什至其他多代码。一个多代码最多可以引用8个过程代码和/或其他多代码的组合。
鉴于此信息,我该如何以以下方式检索信息:数据不被透视(所有codeid列都传输到行中),层次结构被展平并且在查询中看到多代码所引用的所有过程代码约会表?我已经尝试过将这些表连接在一起,但是查询很容易超出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
具有proccode 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