database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9903 게시물 읽기
No. 9903
테이블에 데이타 넣기
작성자
이미나(k2love)
작성일
2017-10-17 22:41
조회수
6,634

 예를 들면요...A테이블에 select 해서 데이타가 없으면 B테이블  insert 넣으려고 합니다..

with 문을 쓰려고 하는데요...어떻게 쿼리를 짜야 할지 모르겠습니다..

가르쳐 주시면 감사 하겠습니다.

이 글에 대한 댓글이 총 6건 있습니다.

음 어느정도는 만들고 올리셔야..

너무 막연합니다.

테이블 정보나

예시정도는 올리셔야 도움을 드릴듯합니다.

 

김주왕(kimjuking)님이 2017-10-18 09:45에 작성한 댓글입니다.

 이런식으로 만들어 봤는데요..

insert into b

values(acol, bcol)
select * from
(
select '넣을값1' acol, '넣을값2' bcol
)

 

잘 안되네요..

이미나(k2love)님이 2017-10-18 10:49에 작성한 댓글입니다.

집합 개념으로 생각하셔야죠.

 

A집합에서 B집합을 빼서 (except) 그놈을 B 집합에 넣는다.

insert into b select from a except select from b

 

김상기(ioseph)님이 2017-10-18 10:55에 작성한 댓글입니다.
이 댓글은 2017-10-18 10:56에 마지막으로 수정되었습니다.

 insert into a select * from except select * from a 에러 나는데여..

이미나(k2love)님이 2017-10-18 11:09에 작성한 댓글입니다.

create table b (aco1 int ,bco1 varchar);

 

with a as

(

select 3 as aco1,'test'::text as bco1

)

insert into b (aco1,bco1)

select aco1,bco1

from a

where (aco1,bco1) not in (select aco1, bco1 from b);

 

모 이런식으로 만들수는 있겠죠

김주왕(kimjuking)님이 2017-10-18 11:12에 작성한 댓글입니다.
이 댓글은 2017-10-18 11:12에 마지막으로 수정되었습니다.

CREATE OR REPLACE FUNCTION public.usp_set_emp_udt

(

p_employee_composite public.employee_udt []

)

RETURNS void AS $$

/*

지현명

*/

DECLARE

_sqlstate text;

_message text;

_context text;

BEGIN

 

--데이터 처리는 delete > update > insert

with upsert as (SELECT A.emp_id, A.emp_nm FROM unnest(p_employee_composite) A),

del as

(

delete from employee

where not exists (select 1 from upsert a where a.emp_id = employee.emp_id)

),

upd as

(

update employee

set emp_nm = upsert.emp_nm

, last_chg_time = clock_timestamp()

from upsert

where upsert.emp_id = employee.emp_id

AND upsert.emp_nm <> employee.emp_nm

)

insert into employee

select upsert.emp_id, upsert.emp_nm, clock_timestamp(), clock_timestamp()

from upsert

where not exists(select 1 from employee where employee.emp_id = upsert.emp_id);

 

EXCEPTION

WHEN OTHERS THEN

GET STACKED DIAGNOSTICS

_sqlstate = RETURNED_SQLSTATE,

_message = MESSAGE_TEXT,

_context = PG_EXCEPTION_CONTEXT;

 

RAISE EXCEPTION E'sqlstate: %, message: %, context: [%]',

_sqlstate, _message, replace(_context, E'n', ' <- ');

 

END;

$$ LANGUAGE 'plpgsql';

 

 

 

 

지현명(gwise)님이 2017-10-22 22:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9906같은 쿼리가 특정 시점에 갑자기 느려지는 현상에 대한 도움이 필요합니다. [10]
배우미
2017-11-01
8517
9905함수 여러개를 하나의 트랜잭션에서 실행 안되나요? [2]
지현명
2017-10-31
6334
9904데이터베이스 기출문제 도와주실분 찾습니다. [4]
김성기
2017-10-24
6502
9903테이블에 데이타 넣기 [6]
이미나
2017-10-17
6634
9902권한 관련 [2]
postgres
2017-10-13
6248
9901update 쿼리 속도에 관해 궁금한 점이 있습니다!! [2]
그레아티
2017-10-12
6636
9900오라클 meger ==> postgresql 변환 [1]
김미현
2017-10-12
7189
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.054초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다