Cách lưu trữ Kết quả truy vấn trong biến bằng mysql


92
SET @v1 := SELECT COUNT(*) FROM user_rating;
SELECT @v1

Khi tôi thực hiện truy vấn này với setbiến, lỗi này được hiển thị.

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT count(*) FROM user_rating' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(1 row(s) returned)
Execution Time : 00:00:00:343
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:343

Câu trả lời:


148

Bao quanh vùng chọn bằng dấu ngoặc đơn.

SET @v1 := (SELECT COUNT(*) FROM user_rating);
SELECT @v1;

12
Có nên truy vấn phụ đó chỉ chứa 1 hàng và 1 cột không? 1. #1242 - Subquery returns more than 1 row , 2.#1241 - Operand should contain 1 column(s)
Shafizadeh

1
@RajatGupta: bạn đang chạy nó ở đâu vậy? Và xác định "không hoạt động".
Sergio Tishedsev

2
@Shafizadeh: vâng, truy vấn con đó sẽ chỉ trả về một hàng và cột
Sergio Tworthysev

Không làm việc cho tôi, đã thử trên phpmyadmin mysql. Một lỗi xuất hiện thông báo "Đã tìm thấy một lệnh mới, nhưng không có dấu phân cách giữa nó và lệnh trước đó" (dịch từ tiếng Đức).
Đen

1
Dường như giá trị trả về phải là một, không phải là một danh sách các giá trị
Victor S

35

Ngoài ra, nếu bạn muốn thiết lập nhiều biến cùng một lúc bằng một truy vấn, bạn có thể sử dụng cú pháp khác để thiết lập các biến mà đi như thế này: SELECT @varname:=value.

Một ví dụ thực tế:

SELECT @total_count:=COUNT(*), @total_price:=SUM(quantity*price) FROM items ...

8

dùng cái này

 SELECT weight INTO @x FROM p_status where tcount=['value'] LIMIT 1;

đã thử nghiệm và hoạt động tốt ...


dấu ngoặc []nghĩa trong câu lệnh này là gì?
amin

không có gì nó chỉ là một giữ chỗ skip [] và chỉ cần đặt giá trị của bạn trong dấu nháy đơn
Aman Maurya

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.