2013-03-29 5 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'는 * Relational Database Management System *을 의미합니다. 'RDBMS는 SQL의 기초입니다 .' 그리고 MS SQL Server, 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 guys ................ –

+0

@KimoAtomix - np, 우리가 도울 수있어서 기쁘다! – sgeddes

1

단순히 좀 더 선호하는 JOIN를 사용하여 IN

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

를 사용하거나,

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에서 이는 1 또는 0을 반환하는 것과 같습니다.이 열은 여전히 ​​단일 열이므로 허용됩니다.

+0

얘들 아, 내가 몇 가지 질문을하지만, 그들이 맞는지 아닌지 잘 모르겠다. –

+0

@KimoAtomix 왜 그걸 시험 해보지 그러니? –

+0

내가 했어. 그들이 틀린 것을 가지고있는 것 같다. –

관련 문제