Ответ 1
Вы можете достичь этого, используя exists
:
DELETE
FROM table1
WHERE exists(
SELECT 1
FROM table2
WHERE table2.stn = table1.stn
and table2.jaar = year(table1.datum)
)
Я ищу способ удалить записи в таблице 1 с соответствующими комбинациями в таблице 2 на 'stn' и 'jaar'. Содержимое столбца "jaar" в таблице2 форматируется на предыдущем этапе/запросе с помощью
year (datum) AS 'jaar'
Извините, не могу найти снова сайт, на котором я нашел это "решение".
DELETE FROM table1
WHERE stn, year(datum) IN (SELECT stn, jaar FROM table2);
Вы можете достичь этого, используя exists
:
DELETE
FROM table1
WHERE exists(
SELECT 1
FROM table2
WHERE table2.stn = table1.stn
and table2.jaar = year(table1.datum)
)
Канонический ответ T-SQL (SqlServer) заключается в использовании DELETE
с JOIN
как таковой
DELETE o
FROM Orders o
INNER JOIN Customers c
ON o.CustomerId = c.CustomerId
WHERE c.FirstName = 'sklivvz'
Это приведет к удалению всех заказов, у которых есть клиент с именем Sklivvz.
Попробуйте добавить круглые скобки вокруг строки в 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;