Postgre Insert쿼리 질문드립니다. 0 3 1,678

by visca구루비 [Oracle 기초] Insert Select empty [2021.04.06 14:01:40]


select
	'20210331' as date,
	A.a,
	A.b 
	A.c,
	A.d
from
	A m left join B on A.key = B.key
where A.date between to_timestamp('20210331', 'YYYYMMDD') and to_timestamp('20210331', 'YYYYMMDD') + interval '1 day'

위와 같이 select를 하고 해당 결과를 Insert하는 방식으로 쿼리를 작성하였습니다

 

그때 select의 row가 빈값(결과없음)으로 나왔을 때 Insert하는 방법은 없을까요??

아래 쿼리는 제가 작성한 Insert 문입니다

insert into t_member_stats (
    date,
    b,
    c,
    d,
    e
)
select
	'20210331' as date,
	A.a,
	A.b 
	A.c,
	A.d
from
	A m left join B on A.key = B.key
where A.date between to_timestamp('20210331', 'YYYYMMDD') and to_timestamp('20210331', 'YYYYMMDD') + interval '1 day'

 

by 마농 [2021.04.06 16:17:51]

1. date 항목
- date 와 같은 예약어를 컬럼명으로 쓰는 것은 바람직하지 않습니다.
- date 가 아닌 다른 명칭으로 적어 주세요.
2. 해당 일자 항목의 자료형이?
- date 인가요? timestamp 인가요? varchr 인가요?
- to_timestamp 를 이용하는 것이 맞는지요?
3. 아우터 조인
- b 를 아우터 조인 하면서? b 를 전혀 사용하지 않는데?
- b 에 대한 조인 자체가 불필요한게 아닌지?


by visca구루비 [2021.04.06 16:35:32]

1. date 컬럼명은 임시로 해놓은거라서 d로 보셔도 무방합니다.

2. 일자는 timestap를 사용하고 있습니다.

3. b테이블에 a테이블의 부가정보들을 담고 있고 b테이블에는 데이터가 있지만 a테이블에는 없는경우가 있어서 조인하였습니다. 기준이 되는 테이블이 a테이블이라서요


by 마농 [2021.04.06 17:40:58]

1. 조회 테이블의 일자 컬럼이 timestamp 군요.
- 입력 대상 테이블의 일자 컬럼은 varchar(8) 인가요?
- 자료형을 일치시켜 주는 것이 중요합니다.
2. 불필요한 테이블 조인
- 사용되지 않는 테이블을 왜 조인하죠?
- 조인 빼도 될 것 같습니다.

SELECT TO_CHAR(x.dt, 'yyyymmdd') dt
     , a.a
     , a.b 
     , a.c
     , a.d
  FROM (SELECT TO_TIMESTAMP('20210331', 'yyyymmdd') dt) x
  LEFT OUTER JOIN a
    ON a.dt >= x.dt
   AND a.dt <  x.dt + INTERVAL '1 day'
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입