Подтвердить что ты не робот

УДАЛИТЬ... ОТ... ГДЕ... В

Я ищу способ удалить записи в таблице 1 с соответствующими комбинациями в таблице 2 на 'stn' и 'jaar'. Содержимое столбца "jaar" в таблице2 форматируется на предыдущем этапе/запросе с помощью

year (datum) AS 'jaar'

Извините, не могу найти снова сайт, на котором я нашел это "решение".

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

Ответ 1

Вы можете достичь этого, используя exists:

DELETE
  FROM table1
 WHERE exists(
           SELECT 1
             FROM table2
            WHERE table2.stn = table1.stn
              and table2.jaar = year(table1.datum)
       )

Ответ 2

Канонический ответ T-SQL (SqlServer) заключается в использовании DELETE с JOIN как таковой

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

Это приведет к удалению всех заказов, у которых есть клиент с именем Sklivvz.

Ответ 3

Попробуйте добавить круглые скобки вокруг строки в 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;