728x90
반응형
https://stackoverflow.com/questions/4069718/postgres-insert-if-does-not-exist-already
위 사이트에서 존재하지 않으면 insert하지 않도록 하는 쿼리문이 필요하였다.
WITH input_sender_index AS (SELECT index FROM user_info WHERE name = $1),
input_receiver_index AS (SELECT index FROM user_info WHERE name = $2)
INSERT INTO friend(sender_index, receiver_index)
VALUES(
SELECT input_receiver_index.index, input_receiver_index.index
WHERE NOT EXISTS(
SELECT * FROM friend WHERE sender_index = input_receiver_index.index
AND receiver_index = input_receiver_index.index
)
)
이와 같이 작성하였다.
실제로 실행해보다가 오류가 발생해서 다음 코드로 변경하였다.
WITH input_sender_index AS (SELECT index FROM user_info WHERE name = $1),
input_receiver_index AS (SELECT index FROM user_info WHERE name = $2)
INSERT INTO friend(sender_index, receiver_index)
(
SELECT
(SELECT index FROM input_sender_index),
(SELECT index FROM input_receiver_index)
WHERE NOT EXISTS(
SELECT * FROM friend WHERE sender_index = (SELECT index FROM input_sender_index)
AND receiver_index = (SELECT index FROM input_receiver_index)
)
)
CTE로 작성한 table의 key는 '.'으로 접근하지 못한다는 걸 깜박하고 있었다. 간단한 접근법이 있으면 좋겠지만 SELECT 서브쿼리를 이용하는 수 밖에 없다.
또한 SELECT절을 insert의 values로 넣으려면 values라는 키워드를 사용하지 않고 넣어야했다.
728x90
반응형
'개발 · 컴퓨터공학' 카테고리의 다른 글
[Capstone Project] THREE.Geometry deprecated (0) | 2023.01.22 |
---|---|
[Capstone Project] dat.GUI를 활용하여 vertices를 수정하고 확인하기 (0) | 2023.01.21 |
[Capstone Project] three.js geometry docs code 분석하기 (2) | 2023.01.20 |
[Capstone Project] three.js 원기둥 모델을 만들어 폭을 조절해보기 (0) | 2023.01.19 |
[Capstone Project] three.js Geometry의 vertex를 gui로 조작해보기 (0) | 2023.01.10 |