티스토리 뷰
728x90
두 사람이 주고 받은 대화를 tb_tx와 tb_rx로 나누어서 저장한다.
두 테이블은 동일한 구조고, tx 한번, rx한번 순서대로 이야기를 한다.
tb_tx와 tb_rx는 아래의 컬럼을 가지고 있다
id | 한 대화의 아이디 |
talk_text | 발화 내용 |
talk_seq | 발화 순서 |
regist_date | 등록일 |
만약 regist_date가 rx와 tx가 동일하다면 단순히 union all로 데이터를 합쳐서 order by regist_date로 하면 될 것이다.
(union은 중복을 제거하기 때문에, 두 데이터의 중복이 확실히 없다면 union all을 쓰는게 성능면에서 좋다)
그런데 여기서 문제는 등록일이 동일하다는 것이다. why...왜 그렇게 되어있는지는 모른다..
이럴 때 해결 방법을 알아보자.
우선, tx가 대화를 먼저 시작하는데, 맨 처음 대화의 talk_text는 무조건 공백이다.
tx : "" - 2022-06-29 18:00
rx : "안녕하세요 tx님" - 2022-06-29 18:00
tx : "네 안녕하세요. 반갑습니다" - 2022-06-29 18:01
rx : "왜 데이터 저장을 이렇게 한대요?" - 2022-06-29 18:01
tx : "저도 모르겠어요" - 2022-06-29 18:02
rx : "어렵네요" - 2022-06-29 18:02
이런 대화 내용이 각각의 tb_tx와 tb_rx에 각각의 대화 순서대로 데이터가 쌓인다고 할 때 두 데이터를 합쳐서 가져와보자
SELECT
X.ID
, X.TALK_TEXT
, X.SPEAKER
, X.SPEECH_NO
, X.TALK_SEQ
, X.REGIST_DATE
FROM (
SELECT ID
, TALK_SEQ
, TALK_TEXT
, '0' AS SPEECH_NO
, 'tx' AS SPEAKER
, REGIST_DATE
FROM TB_TX
WHERE ID='chat_id'
AND TALK_SEQ <> 1
UNION ALL
SELECT ID
, TALK_SEQ
, TALK_TEXT
, '1' AS SPEECH_NO
, 'rx' AS SPEAKER
, REGIST_DATE
FROM TB_CALL_BOT_LOG
WHERE ID='chat_id'
) X
ORDER BY TALK_SEQ, SPEECH_NO
➡️ 실행 결과
ID | TALK_TEXT | SPEAKER | SPEECH_NO | TALK_SEQ | REGIST_DATE |
chat_id | 안녕하세요 tx님 | rx | 1 | 1 | 2022-06-29 18:00 |
chat_id | 네 안녕하세요. 반갑습니다 | tx | 0 | 2 | 2022-06-29 18:01 |
chat_id | 왜 데이터 저장을 이렇게 한대요 | rx | 1 | 2 | 2022-06-29 18:01 |
chat_id | 저도 모르겠어요 | tx | 0 | 3 | 2022-06-29 18:02 |
chat_id | 어렵네요 | rx | 1 | 3 | 2022-06-29 18:02 |
'백엔드 > database' 카테고리의 다른 글
[mariaDB] Communications link failure (0) | 2023.01.12 |
---|---|
[mysql/mariaDb] 대소문자를 구분하지 않는다는 착각 | lower_case_table_names (0) | 2022.08.03 |
mybatis selectKey 사용하기 (0) | 2022.06.21 |
mysql에서 변수 사용하기 (0) | 2022.06.20 |
서브쿼리를 조인으로 변경하기(mysql, 스칼라 서브쿼리) (0) | 2022.06.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Docker
- 스프링
- 자바코테
- 현대코테
- 톰캣
- tomcat
- react
- 쿠버네티스
- Kubernetes
- 코딩테스트
- springboot
- 자바
- java 코테
- softeer java
- java
- 아파치카프카
- mysql
- 코테
- Spring
- centos
- 현대
- 도커
- Linux
- 전자정부프레임워크
- softeer
- 자바스크립트
- 오토에버코테
- 리액트
- 현대오토에버
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함