Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lọc tập hợp kết quả của quy trình đã lưu trữ

Có một số cách để giải quyết vấn đề này. Cách dễ nhất là sửa đổi thủ tục đã lưu trữ để cho phép bạn lọc tập kết quả trực tiếp nhưng tôi giả sử vì một số lý do mà bạn không thể thực hiện việc này.

Những gì bạn cần làm sau đó là lưu trữ các kết quả của thủ tục được lưu trữ trong một bảng / bảng tạm thời như sau:

DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'

CHỈNH SỬA:Nếu bạn có thể chỉnh sửa truy vấn con:

Proc được lưu trữ cũ:... SELECT * FROMMyTableWHERECol1 =@ param1 ANDCol2 =@ param2

Proc được lưu trữ mới:

....
SELECT
*
FROM
   (SELECT
      *
   FROM
      MyTable
   WHERE
      Col1 = @param1 AND
      Col2 = @param2
   ) a
WHERE
   Col3 = FilterRule1

nhưng có lẽ tôi không hiểu đầy đủ về proc được lưu trữ của bạn ở đây. Một bảng tạm thời ở đây không thực sự là giải pháp hiệu quả nhất và có thể hơi phức tạp nhưng nếu nó phù hợp với bạn thì hãy sử dụng nó, nhưng tôi gặp khó khăn khi hình dung tình huống mà bạn không thể sửa đổi proc đã lưu trữ của mình thành sử dụng truy vấn phụ thay vì bảng tạm thời.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tránh các hàm tổng hợp lỗi không được phép trong WHERE

  2. Thiết lập MySQL InnoDB Cluster với MySQL Shell (cùng với MySQL Router)

  3. Cập nhật nhiều hàng với một truy vấn?

  4. Thuộc về nhiều lấy tất cả các hàng (Laravel)

  5. Đếm các trường hợp có giá trị duy nhất trong trường