생활코딩/DataBase
[MySQL] SELECT EXISTS(SELECT * FROM table WHERE col1 = '');
hayjo
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 } ]