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

Xác định một biến trong vùng chọn và sử dụng nó trong cùng một vùng chọn

MySQL tài liệu khá rõ ràng về điều này:

Theo nguyên tắc chung, bạn không bao giờ được gán giá trị cho biến người dùng và đọc giá trị trong cùng một câu lệnh. Bạn có thể nhận được kết quả như mong đợi, nhưng điều này không được đảm bảo. Thứ tự đánh giá cho các biểu thức liên quan đến biến người dùng là không xác định và có thể thay đổi dựa trên các phần tử có trong một câu lệnh nhất định; ngoài ra, thứ tự này không được đảm bảo là giống nhau giữa các bản phát hành của Máy chủ MySQL. Trong SELECT @a, @a: [email protected] +1, ..., bạn có thể nghĩ rằng MySQL sẽ đánh giá @a trước và sau đó thực hiện một phân công thứ hai. Tuy nhiên, việc thay đổi câu lệnh (ví dụ:bằng cách thêm mệnh đề aGROUP BY, HAVING hoặc ORDER BY) có thể khiến MySQL chọn kế hoạch thực thi lại với thứ tự đánh giá khác.

Bạn có thể làm những gì bạn muốn bằng cách sử dụng truy vấn con:

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm giá trị không chứa số trong MySQL

  2. int (11) so với int (bất kỳ thứ gì khác)

  3. Cách hoạt động của hàm MATCH () trong MySQL

  4. Bạn có thể tách / bùng nổ một trường trong một truy vấn MySQL không?

  5. Tại sao MySQL không hỗ trợ độ chính xác mili giây / micro giây?