2011-11-23 53 views
3

我在SQL删除时遇到了一些麻烦。 SQL Server不喜欢在where子句中有多个参数从table_02删除行(子查询是表1)。任何帮助,将不胜感激。SQL Server - 使用子查询帮助删除具有多个where子句的行

谢谢。

DELETE FROM table_02 
     WHERE (col_1,col_2,col_3,col_4) 
     IN (   
      SELECT col_1,col_2,col_3,col_4 
        FROM table_01 
        GROUP BY 
        col_1,col_2,col_3,col_4 
        HAVING SUM(CASE WHEN col_1<6 THEN col_2*-1 ELSE col_2 END)=0 
      ) 

回答

5

可以重写IN作为EXISTS

DELETE 
FROM table_02 
WHERE EXISTS(SELECT * 
       FROM table_01 
       WHERE table_02.col_1 = table_01.col_1 
        AND table_02.col_2 = table_01.col_2 
        AND table_02.col_3 = table_01.col_3 
        AND table_02.col_4 = table_01.col_4 
       HAVING SUM(CASE 
          WHEN col_1 < 6 THEN col_2 * -1 
          ELSE col_2 
         END) = 0) 
1
Delete a 
from table1 a 
Inner Join table2 b 
on a.col = b.col 
WHERE ...