sql - 根据另一个表的组合键删除

标签 sql sql-server tsql

我真的很不愿意发布这个,因为我觉得这是一个常见问题,但我似乎找不到适用于这种情况的答案......(也许我只是一个非常糟糕的谷歌者)。

我有两个相同的表(按列排列,而不是数据),table1 和 table2。我希望删除 table1 中两个表中都存在复合键 (col1, col2) 的记录。这是我所拥有的,这对我来说似乎是正确的,但抛出了错误。

DELETE FROM Table1
WHERE (**Col1**, Col2) IN
(SELECT Col1, Col2
FROM Table1 a
JOIN Table2 b
    ON a.Col1 = b.Col1
    AND a.Col2 = b.Col2)

错误:

Msg 4145, Level 15, State 1, Line 212 An expression of non-boolean type specified in a context where a condition is expected, near ','.

我在具有“红色错误曲线”的代码部分周围放置了两个 *

最佳答案

这可以通过使用 JOIN 与您的 DELETE 干净地执行。 :

DELETE a
FROM 
    Table1 a 
    JOIN Table2 b
        ON a.Col1 = b.Col1
        AND a.Col2 = b.Col2

关于sql - 根据另一个表的组合键删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463982/

相关文章:

mysql - SQL 查询替换并选择特定 DIV 之间的所有内容

c# - 在 C# 中为对象指定动态属性

sql-server - 比较 sql 中的 uniqueidentifier 和字符串哪个更快?

tsql - 解析单列表中的列和数据

sql - 获取 SQL Server 中触发器的调用者

mysql - 如何在Access 2007中创建多字段查询?

mysql - 选择按另一个属性分组的促销项目

sql - 如何实现 "Number of times that Foo has a Bar associated only with that Foo"

sql-server - T-SQL 中是否有替代 "IN"语句的方法?

sql - 如何将多个选择的结果合并为一行