DELETE ... FROM ... WHERE ... IN

时间:2011-11-05 11:46:38

标签: sql

我正在寻找一种方法来删除表1中的记录,其中包含'stn'和'jaar'中表2中的匹配组合。表2中列'jaar'的内容在前一阶段/查询中按

格式化
  

year(datum)AS'jaa'

抱歉,找不到我找到此“解决方案”的网站。

DELETE FROM table1
WHERE stn, year(datum) IN (SELECT stn, jaar FROM table2);

3 个答案:

答案 0 :(得分:21)

您可以使用exists

来实现此目的
DELETE
  FROM table1
 WHERE exists(
           SELECT 1
             FROM table2
            WHERE table2.stn = table1.stn
              and table2.jaar = year(table1.datum)
       )

答案 1 :(得分:14)

规范的T-SQL(SqlServer)答案是DELETE使用JOIN

DELETE o
FROM Orders o
INNER JOIN Customers c
    ON o.CustomerId = c.CustomerId
WHERE c.FirstName = 'sklivvz'

这将删除所有客户名为Sklivvz的订单。

答案 2 :(得分:4)

尝试在table1中的行周围添加括号,例如

DELETE 
  FROM table1
 WHERE (stn, year(datum)) IN (SELECT stn, jaar FROM table2);

以上是标准SQL-92代码。如果这不起作用,可能是您选择的SQL产品不支持它。

这是另一种在供应商中更广泛实施的标准SQL方法,例如在SQL Server 2008上测试:

MERGE INTO table1 AS t1
   USING table2 AS s1
      ON t1.stn = s1.stn
         AND s1.jaar = YEAR(t1.datum)
WHEN MATCHED THEN DELETE;
相关问题