0

我有以下查询:

delete from Copies
where (id,MovieID) IN (
select distinct id,MovieID
from copies 
where type = 'dubbed' AND (id,MovieID) NOT IN (select id,MovieID from Bookings))

我基本上是在尝试删除我的一张桌子中从未预订/保留的所有“配音”副本。当我执行查询时,它被告知:

在预期条件的上下文中指定的非布尔类型的表达式,靠近“,”。

我知道这个查询在 PostgreSQL 中运行良好,但在 SQL Server 2012 上执行它时遇到问题。我应该在这里做什么?

4

2 回答 2

1

这个版本应该可以在 SQL server 上运行。

delete 
    c
from
    copies c
where
    type = 'dubbed' and
    not exists (
        select
            'x'
        from
            Bookings b
        Where 
            c.id = b.id and
            c.movieId = b.MovieId
    )
于 2013-11-01T00:10:03.133 回答
1

这就是你应该如何在Postgres中开始的:

DELETE FROM copies
WHERE  type = 'dubbed'
AND    NOT EXISTS (
   SELECT 1           -- it's irrelevant what goes here
   FROM   bookings b
   WHERE  b.id = copies.id
   AND    b.movieid = copies.movieid
   );

这同样适用于 SQL-Server(至少 2008 或更高版本)。

->SQLfiddle 演示。

更多关于上面代码中的注释。

于 2013-11-01T00:55:23.240 回答