从查询结果集创建新表行

时间:2013-10-09 14:49:10

标签: mysql sql

长时间潜伏,第一次海报。我已经在这个项目上工作了一段时间,似乎正在打砖墙。我查看了大量关于查询等价的帖子,但没有人看到适用。在这一点上,我想知道我是否可以在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

1 个答案:

答案 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 过程,如果您想了解更多相关信息。