2011-06-19 7 views
3

を返しました:SQL ServerはエラーをDELETE - サブクエリは、サブクエリを使用して行を削除しようとしたとき、私は、エラーを持つ以上1つの値

DELETE FROM tblOrderDetails 
WHERE ProductID = (SELECT ProductID FROM tblProducts WHERE Discontinued = 1) 

を私は理解してエラーがある:

メッセージ512、レベル16、状態1、行1
サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。
ステートメントが終了しました。

サブクエリがいくつかの値を戻していることは知っていますが、どうすればこれらの行を削除できますか?ありがとうございました。 パトリック

+2

'= '演算子を使ってリストに何かがあるかどうかを調べることはできません。 – marnir

答えて

9

この

DELETE FROM tblOrderDetails 
WHERE ProductID IN (
    SELECT ProductID 
    FROM tblProducts 
    WHERE Discontinued = 1 
) 
2

使用inをお試しください:

DELETE FROM tblOrderDetails WHERE ProductID IN (SELECT ProductID FROM tblProducts WHERE Discontinued = 1) 
1

INは、あなたがインクルードを削除する必要が集合していない単一の行を定義することができます。

DELETE FROM tblOrderDetails WHERE ProductID IN (SELECT ProductID FROM tblProducts WHERE Discontinued = 1) 
2

このお試しください:

DELETE OD 
FROM tblOrderDetails AS OD 
INNER JOIN tblProducts as P ON P.ProductID =OD.ProductID 
WHERE P.Discontinued = 1; 
1
DELETE 
    FROM tblOrderDetails 
WHERE EXISTS (
       SELECT * 
       FROM tblProducts AS T2 
       WHERE T2.ProductID = tblOrderDetails.ProductID 
         AND T2.Discontinued = 1 
      ); 

をしかし、監査人は、今中止製品の履歴データの損失についてどう思いますか...?

関連する問題