如果我有tableA和tableB有三列:
colA | colB | colC
我只需要看一下colA和colB
到目前为止,我有这个,但它一直在删除我的表中的每一行:
DELETE
FROM
dbA.dbo.tableA
WHERE
EXISTS(
SELECT DISTINCT
a.colA
,a.colB
FROM
dbB.dbo.tableB b WITH(NOLOCK)
INNER JOIN dbA.dbo.tableA a WITH(NOLOCK) ON
b.colA = a.colA
AND
b.colB = b.colB
)
显然我做错了什么,但是我碰到了墙,似乎无法弄清楚为什么它仍在删除tableA中的所有行
谢谢。
答案 0 :(得分:5)
DELETE FROM dbA.dbo.tableA
WHERE EXISTS
(
SELECT *
FROM dbB.dbo.tableB b WITH(NOLOCK)
where
b.colA = dbA.dbo.tableA .colA
AND b.colB = dbA.dbo.tableA .colB
)
答案 1 :(得分:4)
尝试简化形式:
DELETE dbA.dbo.tableA
FROM dbA.dbo.tableA a WITH(NOLOCK)
JOIN dbB.dbo.tableB b WITH(NOLOCK)
ON
b.colA = a.colA
AND b.colB = a.colB
和强>
实际上您的查询附近有错误
b.colB = b.colB
强制从表a中删除额外的
和强>
你可以使用EXISTS而不是JOIN - 正如@ Stefan的回答中提到的那样,结果会相同,但查询会更具可读性
答案 2 :(得分:1)
你能说得更简单吗?
DELETE
FROM dbA.dbo.TableA a
JOIN dbA.dbo.TableB b ON b.colA = a.colA