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

サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。

4

4 に答える 4

1

IN(* を指定する代わりに) items テーブルのフィールドを使用して指定する必要があります。

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

星印は正しい列名に置き換える必要があります。また、サブクエリが 1 つの行だけを返すようにしてください。複数行ではありません。複数行の場合は、代わりに等値比較を IN 句に変更する必要があります。

于 2013-03-29T03:53:34.597 に答える
0

に変更しSELECT ItemID FROM _Items ...ます。エラーは明らかです。サブクエリはItemID単一の列としか比較できないため、複数の列を返すことはできません。これは、 orEXISTSを返すことと同じです。これはまだ単一の列であるため、許可されています。10

于 2013-03-29T03:53:41.320 に答える