SQL 加入并获得缺失记录的空输出
SQL Join and get null output for absent record
如何从以下两个 table(在 SQL Server 2019 中)获得输出:
在这里,只是需要交叉检查table A 和Table B 之间的记录ID 列。
如果 Table B 中不存在记录 ID,则需要将 'NULL' 插入输出 table .
我们已经在下面的查询中尝试过,但没有给出正确的输出。
我们怎样才能得到更快更准确的输出。
SELECT A.ID, A.RecordId,A.LineNo, B.Value
FROM TableA A
LEFT JOIN TableB B ON A.RecordId = B.RecordId
提前致谢。
我正在根据数据对此进行猜测 - 但我认为这就是您想要的。
从表面上看,您基本上想要从 TableA 到 TableB 的 LEFT JOIN(正如您所做的那样),但不仅仅是 RecordID - 它还需要 LineNo。
但是,表 B 中不存在 LineNo。因此,您可以使用 window 函数 ROW_NUMBER() 创建它,例如,
SELECT [ID],
[RecordID],
[Value],
ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
FROM [TableB]
以上创建了以下结果。
ID RecordID Value LineNo
1 100 AA 1
2 102 BB 1
3 102 BC 2
4 103 CC 1
现在,对于您的最终答案,执行类似的 LEFT JOIN 但不是在您的联接中使用 TableB,而是使用带有附加列的子查询 - 然后在联接中包含附加列,例如,
SELECT [A].[ID], [A].[RecordId], [A].[LineNo], [B].[Value]
FROM [TableA] A
LEFT JOIN
(SELECT [ID],
[RecordID],
[Value],
ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
FROM TableB
) B ON A.[RecordId] = B.[RecordId] AND A.[LineNo] = B.[LineNo]
这里是 DB_fiddle 数据和结果。
编辑:调整了拼写错误 - 另请注意,LineNo 似乎是一个保留关键字,因此我在所有这些关键字周围都添加了方括号。
如何从以下两个 table(在 SQL Server 2019 中)获得输出:
在这里,只是需要交叉检查table A 和Table B 之间的记录ID 列。 如果 Table B 中不存在记录 ID,则需要将 'NULL' 插入输出 table .
我们已经在下面的查询中尝试过,但没有给出正确的输出。
我们怎样才能得到更快更准确的输出。
SELECT A.ID, A.RecordId,A.LineNo, B.Value
FROM TableA A
LEFT JOIN TableB B ON A.RecordId = B.RecordId
提前致谢。
我正在根据数据对此进行猜测 - 但我认为这就是您想要的。
从表面上看,您基本上想要从 TableA 到 TableB 的 LEFT JOIN(正如您所做的那样),但不仅仅是 RecordID - 它还需要 LineNo。
但是,表 B 中不存在 LineNo。因此,您可以使用 window 函数 ROW_NUMBER() 创建它,例如,
SELECT [ID],
[RecordID],
[Value],
ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
FROM [TableB]
以上创建了以下结果。
ID RecordID Value LineNo
1 100 AA 1
2 102 BB 1
3 102 BC 2
4 103 CC 1
现在,对于您的最终答案,执行类似的 LEFT JOIN 但不是在您的联接中使用 TableB,而是使用带有附加列的子查询 - 然后在联接中包含附加列,例如,
SELECT [A].[ID], [A].[RecordId], [A].[LineNo], [B].[Value]
FROM [TableA] A
LEFT JOIN
(SELECT [ID],
[RecordID],
[Value],
ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
FROM TableB
) B ON A.[RecordId] = B.[RecordId] AND A.[LineNo] = B.[LineNo]
这里是 DB_fiddle 数据和结果。
编辑:调整了拼写错误 - 另请注意,LineNo 似乎是一个保留关键字,因此我在所有这些关键字周围都添加了方括号。