如何删除表中基于两个特定列的行中的行

时间:2012-01-05 19:56:01

标签: sql sql-server-2005

如果我有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中的所有行

谢谢。

3 个答案:

答案 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