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

标签 sql sql-server tsql left-join

一张表包含代表外科手术部分的代码。一个过程由一个或多个代码描述(每个代码一行)。可能会出现程序的组合。例如,一个操作可以由由一个代码表示的 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/

相关文章:

sql - 在单个查询中使用 "Order by"两次

sql - 如何将执行结果分配给sql变量?

sql - 我们可以在下拉列表的末尾设置静态值吗?

javascript - SQL 与 Sequelize : Compare json columns using where

sql - 如何计算SQL中特定字段的比例?

sql - 将不同日期的总和相加

mysql - SQL - 返回表中重复值的情况

SQL 计算未知列数中的空单元格

c# - SQL Server 2005 SQL 身份验证连接字符串

c# - 在 gridview 中选择一行,然后将所选行传递到另一个页面