我正在寻找一种方法来删除表1中的记录,其中包含'stn'和'jaar'中表2中的匹配组合。表2中列'jaar'的内容在前一阶段/查询中按
格式化year(datum)AS'jaa'
抱歉,找不到我找到此“解决方案”的网站。
DELETE FROM table1
WHERE stn, year(datum) IN (SELECT stn, jaar FROM table2);
答案 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;