【问题标题】:SQL: Deleting rows from table based on columns selected from another tableSQL:根据从另一个表中选择的列从表中删除行
【发布时间】:2015-01-22 19:44:58
【问题描述】:

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

表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')

【问题讨论】:

  • 您的第一个查询只会返回第 102 行。请确认您的输入和输出数据好吗?
  • 抱歉,错字现已修正。它应该返回 102 和 103 行。

标签: sql sql-server


【解决方案1】:

当您在查询中使用IN 子句时,您不能在where 部分中指定超过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

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2017-09-21
    • 2017-01-11
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多