생활코딩/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 } ]