CTE SQL 删除表 b 而不是表 a

问题描述 投票:0回答:1

我计划删除通过 CTE 从表 B 找到的键内的表 A 的数据。但不知何故,这个 CTE 没有从表 A 中删除任何内容,而是删除了表 B 中的我的数据。

WITH tableA AS 
(
    SELECT TOP (100) 
        txn_id, customer_id 
    FROM 
        tableB
    WHERE 
        create_date < DATEADD(DAY, DATEDIFF(DAY, 1500, GETDATE()), 0)
    ORDER BY
        create_date ASC
)
DELETE FROM tableA;

我执行这条SQL语句后,SMSS说有100行受到影响。

然后我立即执行了一个

COUNT(*)
语句来看看事情进展如何。结果发现A表没有删除任何内容,B表却删除了100行数据。

所以我认为我写错了 CTE,需要帮助来纠正这个 SQL。

sql sql-server common-table-expression
1个回答
0
投票

为什么要使用 CTE?为什么不只是一个子查询呢?假设

txn_id
是公共密钥。

DELETE FROM tableA
WHERE txn_id IN (
    SELECT TOP (100) txn_id
    FROM tableB
    WHERE create_date < DATEADD(DAY, DATEDIFF(DAY, 1500, GETDATE()), 0)
    ORDER BY create_date ASC
)
© www.soinside.com 2019 - 2024. All rights reserved.