-
[MySQL] SELECT EXISTS(SELECT * FROM table WHERE col1 = '');생활코딩/DataBase 2020. 12. 1. 10:49
mysql> SELECT EXISTS(SELECT * FROM topic WHERE title = 'apple'); +---------------------------------------------------+ | EXISTS(SELECT * FROM topic WHERE title = 'apple') | +---------------------------------------------------+ | 1 | +---------------------------------------------------+ 1 row in set (0.00 sec)
새로운 데이터를 입력할 때, 해당 데이터가 이미 존재하는지 확인할 때 유용하다.
만약 업데이트인 경우, 아래와 같이 수정한다고 하면
<기존 데이터>
id title color type 1 apple red fruit <수정 데이터>
id title color type 1 apple red food 같은 데이터의 type 컬럼을 수정할 때, title을 중복으로 잡으면 곤란하다.
이 경우에는 WHERE문에 이 id는 빼고 옵션을 추가해주면 된다.
mysql> SELECT EXISTS(SELECT * FROM topic WHERE title = 'apple' AND NOT id = 1); +------------------------------------------------------------------+ | EXISTS(SELECT * FROM topic WHERE title = 'apple' AND NOT id = 1) | +------------------------------------------------------------------+ | 0 | +------------------------------------------------------------------+ 1 row in set (0.00 sec)
결과를 object나 dictionary 형태로 받아야 하는 경우, 위 데이터는
[ RowDataPacket { 'EXISTS(SELECT * FROM topic WHERE title = 'apple' AND NOT id = 1)': 0 } ]
처럼 전달되어서 불편하다. 아래 구문처럼 AS dup 처럼 변수명을 지정해주면
mysql> SELECT EXISTS(SELECT * FROM topic WHERE title = 'apple' AND NOT id = 1) AS dup;
아래와 같이 전달 받을 수 있다.
[ RowDataPacket { dup: 0 } ]
'생활코딩 > DataBase' 카테고리의 다른 글
[MySQL] 데이터 삭제 시 백업 테이블로 데이터 옮겨놓기 (0) 2020.12.01 [MySQL] 언어설정: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD (0) 2020.11.11 [MySQL] DELETE FROM .. WHERE id IS NULL; (0) 2020.11.08 [MySQL] ALTER TABLE table ... TIMESTAMP (0) 2020.11.08 [MySQL] 테이블 분리와 JOIN (0) 2020.09.28