본문 바로가기
Develop/MSSQL

[sqlite] SQLite 여러행 업데이트 & CORRELATED SCALAR SUBQUERY

by 3-stack 2021. 11. 21.

# MSSQL 처럼 JOIN 을 사용한 UPDATE 구문은 사용할 수 없다.

UPDATE T SET T.SuNo = S.SuNo
FROM tbSS T
INNER JOIN tmp_tbSS S
	ON S.SuIdx = T.SuIdx

 

# SQLite에서 여러행 업데이트는 아래와 같이 할 수 있다.

-- EXPLAIN QUERY PLAN
UPDATE OR IGNORE tb_SS SET
	SuNo = (SELECT SuNo FROM tmp_SS WHERE SuIdx = tb_SS.SuIdx)
WHERE EXISTS (
	SELECT *
	FROM tmp_SS
	WHERE SuIdx = tb_SS.SuIdx
)

 

# 실행계획도 한번 보고~

 

# CORRELATED SCALAR SUBQUERY 가 보인다. 뭘까?

- 상호연관(상호관련) 서브쿼리 라고 한다.

- 메인쿼리의 값을 서브쿼리가 사용하고, 서브쿼리의 값을 받아서 메인쿼리가 계산하는 구조의 쿼리.

  - 한번 스캔해서 두 군데서 쓴다는 느낌쓰~

 

# 서브쿼리 개념도 한번 보고~

- SELECT 문에서 쓰면, 스칼라 서브쿼리

- FROM 문에서 쓰면, 인라인 뷰

- WHERE 문에서 쓰면, 서브쿼리

 

# 참고 - SQLite 임시테이블 만들기

DROP TABLE IF EXISTS tmp_stuSet;
CREATE TEMPORARY TABLE tmp_stuSet (
  StuSetIdx INTEGER NOT NULL
  , SuhumNo TEXT
  , VrNo TEXT
  , PRIMARY KEY (StuSetIdx)
) WITHOUT ROWID;

INSERT INTO tmp_stuSet
SELECT *
FROM tbStuSet;

댓글