2011-05-13 2 views
1

두 개의 테이블 UserStatus와 User가 있습니다. 하위 쿼리로 여러 행 업데이트

을 삭제 사용자 이름, 상태

사용자가 두 개의 필드 아이디, 내가 쿼리

Update users 
    set deleted = '1' 
where username = (select username 
        from tempDUDPIVOT 
        where status = 'inactive') 

를 사용하지만 오류가있어입니다 :

UserStatus 두 개의 필드가

하위 쿼리가 두 개 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 식으로 사용될 때 하위 쿼리가 수행되는 경우에는 허용되지 않습니다.

다양한 변형을 시도했지만 해결책을 찾아 내지 못했습니다 ... 아주 분명합니다.

귀하의 도움에 감사드립니다.

감사합니다.

답변

2

UPDATE 구문에는 스칼라 하위 쿼리가 필요합니다. EXISTS (subquery)을 사용하면 술어의 매개 변수가 서로 가깝게됩니다 (예 : 쿼리를 읽기 및 유지하기가 더 간편 해짐, IMO). 당신의 도움에 대한

MERGE INTO users 
    USING (
      SELECT username 
      FROM tempDUDPIVOT 
      WHERE status = 'inactive' 
     ) AS T1 (username) 
     ON T1.username = users.username 
WHEN MATCHED THEN 
    UPDATE 
     SET users.deleted = '1'; 
+0

감사합니다 : 당신의 SQL 제품이 지원하는 경우

UPDATE users SET deleted = '1' WHERE EXISTS ( SELECT * FROM tempDUDPIVOT AS T1 WHERE T1.status = 'inactive' AND T1.username = users.username ); 

당신은 또한 (더 멀리 여기 술어의 매개 변수를 주목하지만) 표준 SQL MERGE를 사용할 수 있습니다. 그 SQL2005에서 그래서 나는 병합을 사용할 수 없습니다. – Stan

3
Update users set deleted = '1' 
where username IN (select username from tempDUDPIVOT where status = 'inactive') 

IN0..inf 값이 반환 될 받아들이고 = 1 개만 수용하고 (0이 아닌 42).

관련 문제