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)
THX傢伙所有現代數據庫系統................ –
@KimoAtomix - np,很高興我們可以幫助! – sgeddes
只需使用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
我也喜歡JOIN,但它不適用於每個RDBMS(例如Oracle)。 – sgeddes
明星應該是替換爲正確的列名稱。還要確保子查詢只返回一行。不是多行。如果有多行,則需要改爲將相等比較改爲IN子句。
將其更改爲SELECT ItemID FROM _Items ...
。錯誤非常明顯:您的子查詢不允許返回多個列,因爲ItemID
只能與單列進行比較。在EXISTS
這將是相當於返回1
或0
,這仍然是一個單一的柱,從而允許的。
傢伙我有一些querys,但IAM不知道他們是正確的還是不看他們 –
@KimoAtomix爲什麼你不只是測試出來? –
我做了,但他們似乎有什麼問題 –
你正在使用什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'RDBMS'代表*關係數據庫管理系統*。 'RDBMS是SQL'的基礎,像MS SQL服務器,IBM DB2,Oracle,MySQL等,等... –