0

长期潜伏者,第一次海报。我已经在这个项目上工作了一段时间,似乎正在碰壁。我浏览了很多关于查询等价的帖子,但没有一个适用。在这一点上,我想知道我是否可以在 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
4

1 回答 1

0

理解你在寻找什么有点困难,但我会试一试。

听起来你应该把它分成几遍。

我将您的 LOINC 视为业务密钥(在两个来源上都是唯一的)。因此,如果您将 LOINC 添加到目标表,您可以对每个源执行插入/更新过程。

第一遍:(从 LAB A 更新现有的)从 LabA(查询) INNER JOIN中获取唯一的 LOINC 列表和 Order_Code 到您现有的目标表(在 loinc 上),并更新LabA 的 Test_Desc、Order_Code。

第二遍:(从 LAB A 插入新的)从 LabA(查询)获取 LOINC 和 Order_Code 的唯一列表 LEFT JOIN到目标表(在 loinc 上)并插入新行(LabA 为空),其中 TARGET.Test_id 为空

第三遍:(从 LAB B 更新现有的)从 LabB(查询) INNER JOIN获取唯一的 LOINC 列表和 Order_Code到您现有的目标表(在 loinc 上)并更新LabB 的 Test_Desc、Order_Code。

第四遍:(从 LAB A 插入新的)从 LabB(查询)获取 LOINC 和 Order_Code 的唯一列表 LEFT JOIN到目标表(在 loinc 上)并插入新行(LabB 为空),其中 TARGET.Test_id 为空

您应该能够将整个过程放入一个您可以调用的存储过程中,它会为您完成这一切。

如果您有兴趣,如果您想了解更多信息,这是一个upsert过程。

于 2013-10-09T15:06:36.003 回答