gpt4 book ai didi

sql - 基于 SQL Server 中两个表中的一到多行执行左连接

转载 作者:行者123 更新时间:2023-12-02 20:20:39 25 4
gpt4 key购买 nike

一张表包含代表外科手术部分的代码。一个过程由一个或多个代码描述(每个代码一行)。可能会出现程序的组合。例如,一个操作可以由由一个代码表示的 1 个过程和由 3 个代码表示的第二个过程(该操作为 4 行)组成。

必须使用第二个表执行左连接,该表包含过程的代码,每一行中有一个或多个代码。

值得注意的是,用于描述基于总共三个代码的过程的特定代码也可能作为描述不同过程的单个代码出现,如表#Procedures 中的最后一个条目。因此,简单的连接并不能解决问题。

在当前的解决方案中,我在 SQL Server 2014 中使用两个嵌套的 while 语句,需要花费数小时。是否有更有效的方法来执行此任务,也许使用 SQL Server 的 xml 功能?

任何帮助表示赞赏。

示例:

CREATE TABLE #Procedures 
(
ProcID INT,
NumberofCodes INT,
Codes NVARCHAR(20)
)

INSERT INTO #Procedures (ProcID, NumberofCodes, Codes)
VALUES (1, 1, 'SingleCodeXYZ'), (2, 3, 'TripleCodeXY1'), (2, 3, 'TripleCodeXY2'),
(2, 3, 'TripleCodeXY3'), (3, 2, 'DoubleCodeXY1'), (3, 2, 'DoubleCodeXY2'),
(4, 1, 'SingleCodeABC'), (5, 1, 'TripleCodeXY2')

CREATE TABLE #KodesforOperations
(
OPID INT,
ProcID INT,
NumberofCodes INT,
Codes NVARCHAR(20)
)

INSERT INTO #KodesforOperations (OPID, NumberofCodes, Codes)
VALUES (1, 4, 'SingleCodeXYZ'), (1, 4, 'TripleCodeXY1'), (1, 4, 'TripleCodeXY2'),
(1, 4, 'TripleCodeXY3'),
(2, 1, 'SingleCodeABC'),
(3, 2, 'DoubleCodeXY1'), (3, 2, 'DoubleCodeXY2')

--SELECT * FROM #Procedures
--SELECT * FROM #KodesforOperations

--nested While statements:
UPDATE A
SET A.ProcID = B.ProcID
FROM #KodesforOperations A
LEFT JOIN #Procedures B On A.Codes = B.Codes
WHERE A.NumberofCodes >= 3 AND B.NumberofCodes >= 3

UPDATE A
SET A.ProcID = B.ProcID
FROM #KodesforOperations A
LEFT JOIN #Procedures B On A.Codes = B.Codes
WHERE A.NumberofCodes >= 2 AND B.NumberofCodes >= 2

UPDATE A
SET A.ProcID = B.ProcID
FROM #KodesforOperations A
LEFT JOIN #Procedures B On A.Codes = B.Codes
WHERE A.NumberofCodes >= 1 AND B.NumberofCodes >= 1

SELECT * FROM #KodesforOperations

最佳答案

您应该能够组合这些条件。然而,这在逻辑上相当于只检查第三个:

UPDATE A
SET A.ProcID = B.ProcID
FROM #KodesforOperations A JOIN
#Procedures B
On A.Codes = B.Codes
WHERE A.NumberofCodes >= 1 AND B.NumberofCodes >= 1;

如果此条件为真,则与 23 的比较也为真。

LEFT JOIN 是不必要的,因为您需要两个表中的匹配项来测试 WHERE 条件。

关于sql - 基于 SQL Server 中两个表中的一到多行执行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com