SQL:根据从另一个表中选择的列从表中删除行

时间:2015-01-22 11:34:50

标签: sql sql-server

我正在尝试选择由两列中的值标识的表中的行。值可在另一个表中找到。一个例子应该有所帮助:

表1

A | B | C
101 1   x
102 1   o
103 1   o

SELECT A, B FROM Table1 where Table1.C = 'o'

返回:

A | B
102 1
103 1

我想删除Table2中的行,其中A和B与Table1上的查询返回的行匹配。

表2

A | B | D
101 1   Not deleted
102 1   Deleted
103 1   Deleted

变为:

A | B | D
101 1   Not selected

第一个选择有效,但我看不到从哪里去。我目前有以下内容,但这是一个错误,我不清楚我应该做什么。教程很受欢迎,因为我是SQL的新手。

DELETE Table2
    where A, B in
        (SELECT A, B FROM Table1
    where Table1.C = 'o')

1 个答案:

答案 0 :(得分:1)

在查询中使用where子句时,IN部分中不能指定多于1个字段。相反,你可以这样做:

delete t from 
table2 t
inner join table1 s on t.a = s.a and t.b = s.b
where s.c = 'o'

Demo