长期潜伏,第一次海报。我已经在这个项目上工作了一段时间,而且似乎遇到了麻烦。我浏览了有关查询等效性的大量帖子,但没有一个适用。此时,我想知道是否可以在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
最佳答案
很难理解您要寻找什么,但我会给您一个机会。
听起来您应该将其分成几个阶段。
我认为您的LOINC是业务密钥(在两个来源上都是唯一的)。因此,如果将LOINC添加到目标表,则可以在每个源上执行插入/更新过程。
首次通过:(来自LAB A的现有更新)
从LabA获取LOINC和Order_Code的唯一列表(查询)
INNER JOIN到您现有的目标表(在线),并为LabA更新UPDATE Test_Desc,Order_Code。
第二次通过:(从LAB A中插入新内容)
从LabA获取LOINC和Order_Code的唯一列表(查询)
左联接到目标表(在腰部),并插入新行(LabA为空),其中TARGET.Test_id为空
第三遍:(来自LAB B的现有更新)
从LabB获取LOINC和Order_Code的唯一列表(查询)
INNER JOIN到您现有的目标表(在腰部),并为LabB更新UPDATE Test_Desc和Order_Code。
第四遍:(从LAB A中插入新的)
从LabB获取LOINC和Order_Code的唯一列表(查询)
左联接到目标表(loinc),并插入新行(LabB为null),其中TARGET.Test_id为null
您应该能够将整个过程放入一个存储过程中,然后可以调用该存储过程,它将为您完成所有工作。
如果您感兴趣,这是一个upsert过程,如果您想了解更多信息。
关于mysql - 从查询结果集中创建新表行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19275383/