CHỈNH SỬA: Những gì tôi nói dưới đây về việc yêu cầu một thủ tục được lưu trữ là KHÔNG ĐÚNG. Hãy thử điều này:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
Đây thực sự là một biểu thức chữ hoa và nó hoạt động tốt bên ngoài một proc được lưu trữ :-)
Ví dụ:
mysql> SELECT CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| foo |
+---------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> SELECT CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| bar |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
Câu trả lời cũ bên dưới cho mối quan tâm lịch sử, vì nó đã thu thập số phiếu ủng hộ:
Tôi nghĩ bạn có thể sử dụng phần bên dưới, nhưng chỉ trong một quy trình được lưu trữ:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
WHEN 1 THEN <QUERY A>
ELSE <QUERY B>
END CASE
Đây là CASE
câu lệnh, khác với CASE
biểu thức ... https://dev.mysql.com/doc /refman/5.0/en/case.html
có nhiều chi tiết đẫm máu hơn.
Trên thực tế, tôi nghi ngờ nói chung nếu bạn muốn thực hiện các truy vấn khác nhau có điều kiện, bạn sẽ cần phải xem xét các thủ tục được lưu trữ - tôi có thể sai, nhưng đó là cảm giác ruột của tôi tại thời điểm này. Nếu bạn có thể làm điều đó, nó có thể sẽ là với biểu thức CASE!
Một chỉnh sửa cuối cùng:trong bất kỳ ví dụ nào trong thế giới thực, tôi có thể thực hiện bit điều kiện trong ứng dụng của mình và chỉ cần chuyển sang SQL (hoặc ORM sẽ tạo ra SQL của tôi) sau khi tôi quyết định tìm kiếm gì.