by tosswin [SQL Query] mariadb insert [2024.02.21 16:41:16]
q_code | q_seq | i_code | rdata1 | rdata2 | note |
T-01 | 1 | I-01 | 110.0 | 120.0 | test-01 |
T-01 | 2 | I-01 | 120.0 | 130.0 | test-01 |
rdata1과 rdata2의 이력을 남겨두기 위해 위와 같은 방법을 사용하고 있습니다.
q_code, q_seq, i_code 는 primary key이며,
note 는 not null로 설정하였습니다.
그리고, 사용하는 기본 쿼리문은 다음과 같습니다.
INSERT INTO tb_code ( q_code, q_seq, i_code, rdata1, rdata2, note ) select 'T-01' as q_code, coalesce(max(q_seq) + 1, 1) as q_seq, 'I-01' as i_code, '120.0' as rdata1, '130.0' as rdata2, coalesce(note, 'test-01') as note from tb_code where q_code = 'T-01' and i_code = 'I-01'
위의 쿼리문을 사용하면 q_seq가 증가하면서 insert가 원하는 대로 되고 있습니다.
그런데, 위의 테이블에서 없는 q_code나 i_code를 사용하려고 하면,
note can not be null 이라는 에러가 발생합니다.
이 때 사용하는 query 문은 아래와 같습니다.
INSERT INTO tb_code ( q_code, q_seq, i_code, rdata1, rdata2, note ) select 'T-01' as q_code, coalesce(max(q_seq) + 1, 1) as q_seq, 'I-02' as i_code, '210.0' as rdata1, '220.0' as rdata2, coalesce(note, 'test-02') as note from tb_code where q_code = 'T-01' and i_code = 'I-02'
위의 query를 사용하면 원하는 결과는
q_code | q_seq | i_code | rdata1 | rdata2 | note |
T-01 | 1 | I-01 | 110.0 | 120.0 | test-01 |
T-01 | 2 | I-01 | 120.0 | 130.0 | test-01 |
T-01 | 1 | I-02 | 210.0 | 220.0 | test-02 |
note의 값은 q_seq 값이 1인 경우에만 insert를 하고
q_seq 값이 2 이상이면 q_seq 값이 1이였을 때 값을 계속 사용하고자 합니다.
어떻게 해결할 수 있는 지 부탁드립니다.
감사합니다.