首页 > 解决方案 > 这个查询做什么?

问题描述

我不确定在人类语言中这个查询最终会在 SQL Server 中做什么。

这个想法是,如果在#Temp 和#TempDuplPos 表中都存在金额为X 的订单,则应该从#Temp 表中删除它。

DELETE #Temp
FROM #Temp
INNER JOIN #TempDuplPos ON (#Temp.[OrderNumber] = #TempDuplPos.[OrderNumber])
AND (#Temp.[Amount] = #TempDuplPos.[Amount])

我所做的测试如下:

SELECT 1 AS OrderNumber, 10 AS Amount
INTO #Temp

SELECT 1 AS OrderNumber, 10 AS Amount
INTO #TempDuplPos

INSERT INTO #Temp
VALUES (2,20)

INSERT INTO #TempDuplPos
VALUES (3,30)

DELETE #Temp
FROM #Temp
INNER JOIN #TempDuplPosON (#Temp.[OrderNumber] = #TempDuplPos.[OrderNumber])
AND (#Temp.[Amount] = #TempDuplPos.[Amount])

SELECT *
FROM #Temp

SELECT *
FROM #TempDuplPos

DROP TABLE #Temp
DROP TABLE #TempDuplPos

看起来它可以完成这项工作,但我不确定我是否会错过一些会在大型数据集中打击我的东西。所以我的问题是,这个查询是否符合我的要求?如果没有,它有什么作用?谢谢!

标签: sql-servertsqljoinsql-delete

解决方案


#Temp它从表中删除记录#TempDuplPos相同OrderNumberAmount存在的记录。

如果您只想删除特定数量的记录,则需要添加一个where子句:

DELETE #Temp
FROM #Temp
INNER JOIN #TempDuplPos 
    ON (#Temp.[OrderNumber] = #TempDuplPos.[OrderNumber])
    AND (#Temp.[Amount] = #TempDuplPos.[Amount])
WHERE #Temp.[Amount] = @Amount 

推荐阅读