SQL Server:执行多列搜索时出现错误4145

时间:2013-10-31 23:59:08

标签: sql sql-server postgresql

我有以下查询:

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上执行它时遇到了问题。我该怎么办?

2 个答案:

答案 0 :(得分: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
    )

答案 1 :(得分: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 demo.

More about the comment in above code.