长期潜伏,第一次海报。我已经在这个项目上工作了一段时间,而且似乎遇到了麻烦。我浏览了有关查询等效性的大量帖子,但没有一个适用。此时,我想知道是否可以在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/

10-10 03:32