1
DELETE FROM _Inventory 
where ItemID = ( 
    SELECT * 
    FROM _Items 
    WHERE RefItemID IN ( 46440 , 46441 , 46442 ) 
        AND ID64 = @ID64 )

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

4

4 回答 4

1

您需要使用IN并指定项目表中的字段(而不是指定 *):

DELETE FROM _Inventory 
WHERE ItemID IN (
    SELECT ItemId 
    FROM _Items 
    WHERE RefItemID IN ( 46440 , 46441 , 46442 ) AND ID64 = @ID64 )
于 2013-03-29T03:53:13.577 回答
1

只需使用IN

DELETE 
FROM _Inventory 
where ItemID IN ( SELECT ItemID 
                  FROM _Items 
                  WHERE RefItemID IN (46440 ,46441 ,46442) 
                        AND ID64 = @ID64 
                )

或者通过使用JOIN我更喜欢的,

DELETE  a
FROM    _Inventory a
        INNER JOIN _Items b
            ON a.ItemID = b.ItemID
WHERE   b.RefItemID IN (46440, 46441, 46442) AND
        b.ID64 = @ID64
于 2013-03-29T03:53:13.813 回答
0

星号应替换为正确的列名。还要确保子查询只返回一行。不是多行。如果多行,则需要将相等比较更改为 IN 子句。

于 2013-03-29T03:53:34.597 回答
0

将其更改为SELECT ItemID FROM _Items .... 错误很明显:您的子查询不允许返回多于一列,因为ItemID只能与单列进行比较。这EXISTS相当于返回1or 0,它仍然是单列,因此是允许的。

于 2013-03-29T03:53:41.320 回答