DELETE FROM _Inventory
where ItemID = (
SELECT *
FROM _Items
WHERE RefItemID IN ( 46440 , 46441 , 46442 )
AND ID64 = @ID64 )
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
DELETE FROM _Inventory
where ItemID = (
SELECT *
FROM _Items
WHERE RefItemID IN ( 46440 , 46441 , 46442 )
AND ID64 = @ID64 )
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
您需要使用IN
并指定项目表中的字段(而不是指定 *):
DELETE FROM _Inventory
WHERE ItemID IN (
SELECT ItemId
FROM _Items
WHERE RefItemID IN ( 46440 , 46441 , 46442 ) AND ID64 = @ID64 )
只需使用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
星号应替换为正确的列名。还要确保子查询只返回一行。不是多行。如果多行,则需要将相等比较更改为 IN 子句。
将其更改为SELECT ItemID FROM _Items ...
. 错误很明显:您的子查询不允许返回多于一列,因为ItemID
只能与单列进行比较。这EXISTS
相当于返回1
or 0
,它仍然是单列,因此是允许的。