带有NOT IN子句的SQL DELETE查询无法正常工作

时间:2015-01-02 20:05:38

标签: sql-server

我有一个简单的删除查询我有两个表table1和table2

查询

DELETE FROM table1
WHERE  end_time NOT IN (SELECT end_time
                        FROM   table2
                        WHERE  comp_name = 'component')
       AND id = 'id' 

查询不会删除记录我在这里缺少的东西我试图用第二个条件更改第一个条件但是它会删除而不检查条件2

这里有哪些替代方案?

我想知道这里的实际问题是什么,查询运行没有错误,但它不正确。

1 个答案:

答案 0 :(得分:3)

可能alias应该解决您的问题,因为这两个表都有相同的列名end_time。可以在可能存在问题的Outer query内引用subquery列。

DELETE FROM table1 
WHERE  end_time NOT IN (SELECT b.end_time
                        FROM   table2 B
                        WHERE  b.comp_name = 'component')
       AND id = 'id'

更新:尝试此删除,因为您的子查询中可能有null个值NOT IN将失败。查看此帖子link

DELETE a
FROM   table1 a
WHERE  NOT EXISTS (SELECT 1
                   FROM   table2 B
                   WHERE  b.comp_name = 'component'
                          AND a.end_time = b.end_time)
       AND id = 'id'