【问题标题】:What this Query does?这个查询做什么?
【发布时间】:2019-09-30 05:15:37
【问题描述】:

我不确定在人类语言中这个查询最终会在 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

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

【问题讨论】:

  • 你测试了吗?
  • 您使用的是哪个 dbms? (该查询是特定于产品的。)
  • 这会从 Columns 与其他 Table 的其他列匹配的表中删除。
  • 是的@joakim-danielson 我当然在一个小数据集中测试了它。
  • 这个问题是乱码——“想法”在代码之间跳来跳去,它做了什么,你想让一些代码做什么。当你说清楚时,它会问两个问题。请只问一个。无论如何,您可能不在乎其中之一。 PS 请在代码问题中提供minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)

标签: sql-server tsql join sql-delete


【解决方案1】:

它从#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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多