Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีที่ดีที่สุดในการตรวจสอบว่าแถวมีอยู่ในตาราง MySQL หรือไม่


ในการทดสอบว่าแถวมีอยู่ในตาราง MySQL หรือไม่ ให้ใช้เงื่อนไข EXISTS เงื่อนไขนี้สามารถใช้ร่วมกับ Subquery ได้ จะคืนค่า TRUE (แสดงเป็น 1) เมื่อแถวมีอยู่ในตาราง มิฉะนั้นจะคืนค่า FALSE (แสดงเป็น 0)

เพื่อความเข้าใจที่ดีขึ้น เราจะสร้างตารางตัวอย่างด้วยคำสั่ง CREATE ก่อน:

mysql> CREATE table ExistsRowDemo -> ( -> ExistId int, -> Name varchar(100) -> ); Query OK, 0 rows affected (0.53 sec)

หลังจากสร้างตารางสำเร็จ ให้เพิ่มข้อมูลตัวอย่างด้วยคำสั่ง INSERT:

mysql> INSERT into ExistsRowDemo values(100,'John'); Query OK, 1 row affected (0.16 sec)
mysql> INSERT into ExistsRowDemo values(101,'Bob'); Query OK, 1 row affected (0.17 sec)
mysql> INSERT into ExistsRowDemo values(103,'Carol'); Query OK, 1 row affected (0.20 sec)
mysql> INSERT into ExistsRowDemo values(104,'David'); Query OK, 1 row affected (0.13 sec)

แสดงข้อมูลทั้งหมดด้วยคำสั่ง SELECT:

mysql> SELECT * from ExistsRowDemo; 

ผลลัพธ์:

+---------+-------+
| ExistId | Name  |
+---------+-------+
| 100     | John  |
| 101     | Bob   |
| 103     | Carol |
| 104     | David |
+---------+-------+
4 rows in set (0.00 sec)

ไวยากรณ์สำหรับตรวจสอบว่าแถวมีอยู่หรือไม่ โดยใช้ EXISTS:

SELECT EXISTS(SELECT * FROM yourTableName WHERE yourCondition); 

กรณีที่ 1: แถวมีอยู่ในตาราง

ทดสอบด้วยเงื่อนไขที่แถวมีอยู่จริง:

mysql> SELECT EXISTS(SELECT * from ExistsRowDemo WHERE ExistId=104); 

ผลลัพธ์:

+------------------------------------------------------+
| EXISTS(SELECT * from ExistsRowDemo WHERE ExistId=104)|
+------------------------------------------------------+
| 1                                                    |
+------------------------------------------------------+
1 row in set (0.00 sec)

จากผลลัพธ์ ค่า 1 หมายถึง TRUE แสดงว่าแถวมีอยู่จริง

กรณีที่ 2: แถวไม่มีอยู่ในตาราง

ทดสอบด้วยเงื่อนไขที่แถวไม่มีอยู่:

mysql> SELECT EXISTS(SELECT * from ExistsRowDemo WHERE ExistId=105); 

ผลลัพธ์:

+------------------------------------------------------+
| EXISTS(SELECT * from ExistsRowDemo WHERE ExistId=105)|
+------------------------------------------------------+
| 0                                                    |
+------------------------------------------------------+
1 row in set (0.00 sec)

ค่า 0 หมายถึง FALSE แสดงว่าแถวไม่มีอยู่