2013-03-29 100 views
1
DELETE FROM _Inventory 
where ItemID = ( 
    SELECT * 
    FROM _Items 
    WHERE RefItemID IN (46440 , 46441 , 46442) 
     AND ID64 = @ID64) 

當子查詢不是用EXISTS引入時,只能在選擇列表中指定一個表達式。查詢不想要工作得很好^^

+0

你正在使用什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'RDBMS'代表*關係數據庫管理系統*。 'RDBMS是SQL'的基礎,像MS SQL服務器,IBM DB2,Oracle,MySQL等,等... –

回答

1

您需要使用IN並從項目表中指定一個字段(而不是指定*):

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

THX傢伙所有現代數據庫系統................ –

+0

@KimoAtomix - np,很高興我們可以幫助! – sgeddes

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 
+0

我也喜歡JOIN,但它不適用於每個RDBMS(例如Oracle)。 – sgeddes

0

明星應該是替換爲正確的列名稱。還要確保子查詢只返回一行。不是多行。如果有多行,則需要改爲將相等比較改爲IN子句。

0

將其更改爲SELECT ItemID FROM _Items ...。錯誤非常明顯:您的子查詢不允許返回多個列,因爲ItemID只能與單列進行比較。在EXISTS這將是相當於返回10,這仍然是一個單一的柱,從而允許的。

+0

傢伙我有一些querys,但IAM不知道他們是正確的還是不看他們 –

+0

@KimoAtomix爲什麼你不只是測試出來? –

+0

我做了,但他們似乎有什麼問題 –

相關問題