[sql] SQL Server 2008에서 테이블 별칭으로 UPDATE SQL을 작성하는 방법은 무엇입니까?

나는 매우 기본이 있습니다 UPDATE SQL

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;

이 쿼리는 Oracle, Derby에서 잘 실행 MySQL되지만 SQL Server 2008
에서는 다음 오류로 실패합니다 .

“메시지 102, 수준 15, 상태 1, 줄 1 ‘Q’근처에 잘못된 구문입니다.”

SQL에서 별명 “Q”를 모두 제거하면 작동합니다.

그러나 별칭을 사용해야합니다.



답변

SQL Server의 업데이트 문에서 별칭을 사용하는 구문은 다음과 같습니다.

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;

여기서 별명은 필요하지 않습니다.


답변

항상 CTE (공통 테이블 형식) 접근 방식을 사용할 수 있습니다.

;WITH updateCTE AS
(
    SELECT ID, TITLE
    FROM HOLD_TABLE
    WHERE ID = 101
)

UPDATE updateCTE
SET TITLE = 'TEST';


답변

Postgres의 특수 사례

위의 솔루션 목록이 작동하지 않습니다. Postgres를위한 솔루션

내가 불을 질렀을 때

UPDATE table Q SET Q.is_active = FALSE ,Q.is_delete = TRUE WHERE Q.name = 'XYZ';

결과 : 오류 : “table”관계의 “q”열이 없습니다.

해결책 SET 데이터 값에 allis를 사용할 필요가 없습니까?

UPDATE table Q SET is_active = FALSE ,is_delete = TRUE WHERE Q.name = 'XYZ';


답변