该查询的作用是什么?

时间:2019-05-13 09:06:37

标签: sql-server tsql join sql-delete

我不确定用这种语言最终会在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

看起来确实可以完成任务,但是我不确定我会错过一些会在大型数据集中打击我的东西。所以我的问题是,此查询是否在做我想要的?如果没有,那该怎么办?谢谢!

1 个答案:

答案 0 :(得分:1)

它从#Temp表中删除记录,其中存在#TempDuplPosOrderNumber相同的Amount上的记录。

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

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