Đối với truy vấn MySQL có điều kiện, bạn có thể sử dụng khái niệm IF ELSE trong thủ tục được lưu trữ. Đầu tiên chúng ta hãy tạo một bảng -
mysql> create table DemoTable1 ( Id int ); Query OK, 0 rows affected (0.62 sec)
Chèn một số bản ghi vào bảng bằng lệnh chèn -
mysql> insert into DemoTable1 values(10); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable1 values(20); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1 values(30); Query OK, 1 row affected (0.12 sec)
Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -
mysql> select *from DemoTable1;
Điều này sẽ tạo ra kết quả sau -
+------+ | Id | +------+ | 10 | | 20 | | 30 | +------+ 3 rows in set (0.00 sec)
Sau đây là truy vấn để tạo bảng thứ hai.
mysql> create table DemoTable2 ( Id int ); Query OK, 0 rows affected (1.07 sec)
Chèn một số bản ghi vào bảng bằng lệnh chèn -
mysql> insert into DemoTable2 values(40); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable2 values(50); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(60); Query OK, 1 row affected (0.11 sec)
Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -
mysql> select *from DemoTable2;
Điều này sẽ tạo ra kết quả sau -
+------+ | Id | +------+ | 40 | | 50 | | 60 | +------+ 3 rows in set (0.00 sec)
Sau đây là truy vấn để tạo một thủ tục được lưu trữ cho truy vấn MySQL có điều kiện.
mysql> DELIMITER // mysql> CREATE PROCEDURE Conditional_Query(id int) BEGIN IF id >=40 THEN Select * from DemoTable2; ELSE Select * from DemoTable1; END IF; END // Query OK, 0 rows affected (0.21 sec) mysql> DELIMITER ;
Bây giờ bạn có thể gọi thủ tục đã lưu trữ với sự trợ giúp của lệnh CALL -
mysql> call Conditional_Query(100);
Điều này sẽ tạo ra kết quả sau -
+------+ | Id | +------+ | 40 | | 50 | | 60 | +------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.03 sec)
Gọi lại và chuyển một giá trị khác -
mysql> call Conditional_Query(13);
Điều này sẽ tạo ra kết quả sau -
+------+ | Id | +------+ | 10 | | 20 | | 30 | +------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.02 sec)