| 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이였을 때 값을 계속 사용하고자 합니다.
어떻게 해결할 수 있는 지 부탁드립니다.
감사합니다.
집계 쿼리에서 note 를 집계함수 없이 단독으로 사용한 것은 표준에 어긋나는 사용법입니다.
MariaDB, MySQL 에서는 이 구문이 오류 없이 동작을 하죠.
하지만 이러한 비표준 구문은 지양되어야 할 사용법 입니다.
여러개의 note 중에 어떤 값이 나와야 할지 정해지지가 않습니다.
아무값이나 나오게 되겠지요?
아마도 첫번째 값이 나올 것 같기는 합니다.
어떤값을 원하는 걸까요?
정말로 아무값이나 원한다면?
집계함수로 한번 감싸 주면 됩니다.
MIN(note), MAX(note), ANY_VALUE(note)
감사합니다. 마농님.
제가 사용한 query가 집계함수라는 생각도 하지 못했네요.
가르쳐주신 방법 중에 min을 사용하여 적용을 완료했습니다.
도움을 주셔서 감사합니다.