我一直不愿发帖,因为我觉得这是一个常见的问题,但我似乎无法找到适用于这种情况的答案......(也许我只是一个非常糟糕的Google员工。) / p>
我有两个相同的表(列式,不是数据),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非布尔表达式 在预期条件的上下文中指定的类型,靠近','。
我在代码部分放了两个*
,其中包含“Red error squiggles”。
答案 0 :(得分:21)
可以使用JOIN
DELETE a
FROM
Table1 a
JOIN Table2 b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2
干净地执行此操作
{{1}}
答案 1 :(得分:8)
是哪个DBMS?如果它在oracle中,则成对比较应该有效。
DELETE FROM Table1
WHERE (Col1, Col2) IN
(SELECT Col1, Col2
FROM Table2)
如果是SQL服务器,则迈克尔的解决方案应该有效。
答案 2 :(得分:1)
没有一个答案涵盖一般情况,所以我会放我的:
您必须将字段合并为一个字段:
例如:
DELETE FROM Table1
WHERE concat(Col1,'******',Col2)
IN (SELECT concat(a.Col1,'******',b.Col2)
FROM Table1 a
JOIN Table2 b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2))