长时间潜伏,第一次海报。我已经在这个项目上工作了一段时间,似乎正在打砖墙。我查看了大量关于查询等价的帖子,但没有人看到适用。在这一点上,我想知道我是否可以在SQL中执行此操作,或者我是否需要编写程序来完成繁重的工作。所以无论如何,这里是:
我有两个实验室A和实验室B都有简编(综合测试列表)。我已经尝试通过为每个实验室创建订单代码表,每个实验室的结果表以及每个实验室的结果表顺序来尽可能地简化概要。
Lab A
LabA_Order_Codes
LabA_Order_Code LabA_Order_Desc
000455 Thyroid Panel
000620 Thyroid Panel with TSH
...
999706 ECG Tracing/Computer Analysis
LabA_Order_Result_Code_Id LabA_Order_Code LabA_Result_Code
1 000455 001149
2 000455 001156
3 000455 001164
4 000620 004264
5 000620 001149
6 000620 001156
7 000620 001164
...
19495 999706 999706
LabA_Result_Codes
LabA_Result_Code LabA_Result_Desc LabA_Result_LOINC
001149 Thyroxine (T4) 3026-2
001156 T3 Uptake 3050-2
001164 Free Thyroxine Index 32215-6
...
004264 TSH 11579-0
...
999706 ECG Interpretation 11524-6
Lab B
LabB_Order_Codes
LabB_Order_Code LabB_Order_Desc
7020 Thyroid Panel
7444 Thyroid Panel with TSH
...
95594 Retest Phenobarbital
LabB_Order_Result_Code_Id LabB_Order_Code LabB_Result_Code
...
10780 7020 55075100
10781 7020 55075200
10782 7020 55075300
...
20579 7444 55075100
20580 7444 55075200
20581 7444 55075300
20582 7444 55075400
...
19495 95594 99950100
LabB_Result_Codes
LabB_Result_Code LabB_Result_Desc LabB_Result_LOINC
55075100 Thyroxine (T4) 3026-2
55075200 T3 Uptake 3050-2
55075300 Free Thyroxine Index 32215-6
55075400 TSH 11579-0
...
99950100 Phenobarbital 11524-6
我想要完成的是填充一个单独的表,该表在LOINC代码相同时导出订单代码(这表示正在执行相同的测试)。如果LOINC“指纹”是唯一的,则行中其他实验室的订单代码为空,但常见的“指纹”都在同一行上。因此,当LOINC代码3026-2,3050-2和32215-6一起出现时,同一行中的实验室A和实验室B应该有一个条目及其各自的订购代码。很抱歉长篇大论,但我想彻底解释一下!
如果对我使用MySQL 5.6的任何人都很重要。
Target Table
Test_Id Test_Desc LabA_Order_Code LabB_Order_Code
1 Thyroid Panel 000455 7020
2 Thyroid Panel w/TSH 000620 7444
...
3490 ECG Interpretation 999706 null
...
4210 Retest Phenobarbital null 95594
答案 0 :(得分:0)
有点难以理解你在寻找什么,但我会试一试。
听起来你应该把它分成几个通道。
我将您的LOINC视为业务密钥(两个来源都是唯一的)。因此,如果将LOINC添加到目标表,则可以对每个源执行插入/更新过程。
首次通过:(从LAB A更新) 从LabA获取LOINC和Order_Code的唯一列表(查询) INNER JOIN 到您现有的目标表(在loinc上)和 UPDATE Test_Desc,LabA的Order_Code。
第二次通过:(从LAB A插入新的) 从LabA获取LOINC和Order_Code的唯一列表(查询) LEFT JOIN 指向目标表(在loinc上)和 INSERT 新行(LabA为null)其中TARGET.Test_id为空
第三次通过:(从LAB B更新) 从LabB获取LOINC和Order_Code的唯一列表(查询) INNER JOIN 指向您现有的目标表(在loinc上)和 UPDATE Test_Desc,LabB的Order_Code。
第四次通过:(从LAB A插入新的) 从LabB获取LOINC和Order_Code的唯一列表(查询) LEFT JOIN 指向目标表(在loinc上)和 INSERT 新行(包含LabB null)其中TARGET.Test_id为空
您应该能够将整个过程放入一个可以调用的存储过程中,它将为您完成所有操作。
如果您有兴趣,这是一个 upsert 过程,如果您想了解更多相关信息。