2016-10-11 4 views
1

Я хочу удалить записи с той же комбинацией записей из таблицы, используя этот запрос. Синтаксис работает в PostgreSQL, но не в SQL Server. Что может быть причиной?Удалить на основе группы в SQL Server

DELETE FROM Table_stg 
     WHERE (cid , t_date , i_location , item) in 
      (SELECT b.cid , b.t_date, b.i_location, b.itemFROM Table_vw b) 
+3

Вам не хватает пробелов перед 'from' во внутреннем запросе, не уверен, что это настоящая проблема или просто проблема, вставленная здесь. Во всяком случае, какая ошибка вы получаете? – Mureinik

+0

Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с ','. Это ошибка, которую я получаю – puzeledbysql

+0

«SELECT» внутри 'IN (...)' может возвращать только один столбец в SQL Server. Для этого вам нужно будет использовать отдельные 'IN()' s для этого оператора. – Kidiskidvogingogin

ответ

5

В SQL Server (или любой другой базы данных), вы можете использовать exists:

DELETE FROM Table_stg a 
    WHERE EXISTS (SELECT 1 
        FROM Table_vw b 
        WHERE a.cid = b.cid AND a.t_date = b.t_date AND 
         a.i_location = b.location AND a.item = b.item 
       ); 

SQL Server не позволяет кортежи для IN.

+0

большое спасибо, я не знал, что записи IN – puzeledbysql

Смежные вопросы