Hướng dẫn how do you set a value to variable by select statement in mysql? - làm cách nào để bạn đặt giá trị thành biến bằng câu lệnh chọn trong mysql?

Có, nhưng bạn cần di chuyển gán biến vào truy vấn:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

Trường hợp kiểm tra:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

Result:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

Lưu ý rằng đối với

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
3,
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
4 hoặc
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
5 có thể được sử dụng làm toán tử gán. Tuy nhiên, bên trong các câu lệnh khác, toán tử gán phải là
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
5 chứ không phải
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
4 vì
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
4 được coi là một toán tử so sánh trong các câu lệnh không đặt.


UPDATE:

Hơn nữa để nhận xét bên dưới, bạn cũng có thể làm như sau:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;

Sử dụng các biến do người dùng xác định trong các câu lệnh SQL

Vấn đề

Bạn muốn lưu một giá trị được tạo ra bởi một biểu thức để bạn có thể tham khảo nó trong một câu lệnh tiếp theo.

Dung dịch

Sử dụng biến do người dùng xác định để lưu trữ giá trị để sử dụng sau.

Thảo luận

Bạn có thể gán một giá trị được trả về bởi câu lệnh

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
9 cho biến do người dùng xác định, sau đó tham khảo biến sau này trong phiên MySQL của bạn. Điều này cung cấp một cách để lưu một kết quả được trả lại từ một tuyên bố, và sau đó tham khảo nó sau trong các tuyên bố khác. Cú pháp gán giá trị cho biến người dùng trong câu lệnh
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
9 là
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
1
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
2
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
5
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
4, trong đó
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
2 là tên biến và
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
4 là giá trị mà bạn đang truy xuất. Biến có thể được sử dụng trong các câu lệnh tiếp theo bất cứ nơi nào cho phép biểu thức, chẳng hạn như trong mệnh đề
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
7 hoặc trong một câu lệnh
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
8.

Một tình huống phổ biến trong đó các biến người dùng có ích là khi bạn cần đưa ra các câu lệnh liên tiếp trên nhiều bảng có liên quan bởi một giá trị khóa chung. Giả sử rằng bạn có bảng

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
9 với cột
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
0 xác định mỗi khách hàng và bảng
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
1 cũng có cột
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
0 để cho biết khách hàng nào mỗi đơn hàng được liên kết. Nếu bạn có tên khách hàng và bạn muốn xóa hồ sơ khách hàng cũng như tất cả các đơn đặt hàng của khách hàng, bạn cần xác định giá trị
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
0 phù hợp cho khách hàng đó, sau đó xóa các hàng khỏi cả hai bảng
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
9 và
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
1 khớp với ID. Một cách để làm điều này là trước tiên là lưu giá trị ID trong một biến, sau đó tham khảo biến trong các câu lệnh
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
6:

mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;

Câu lệnh

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
9 trước gán giá trị cột cho một biến, nhưng các biến cũng có thể được gán giá trị từ các biểu thức tùy ý. Câu lệnh sau đây xác định tổng cao nhất của các cột
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
8 và
SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
9 trong bảng
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
0 và gán nó cho biến
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
1:

mysql>SELECT @max_limbs := MAX(arms+legs) FROM limbs;

Một cách sử dụng khác cho một biến là lưu kết quả từ

mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
2 sau khi tạo một hàng mới trong một bảng có cột
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
3:

mysql>SELECT @last_id := LAST_INSERT_ID();

mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
2 Trả về giá trị của giá trị
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
3 mới. Bằng cách lưu nó trong một biến, bạn có thể tham khảo giá trị nhiều lần trong các câu lệnh tiếp theo, ngay cả khi bạn đưa ra các câu lệnh khác tạo ra các giá trị
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
3 của riêng chúng và do đó thay đổi giá trị được trả về bởi
mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
2. Kỹ thuật này được thảo luận thêm trong Chương & NBSP; 11.

Các biến người dùng giữ các giá trị đơn. Nếu bạn gán giá trị cho một biến bằng cách sử dụng câu lệnh trả về nhiều hàng, giá trị từ hàng cuối cùng được sử dụng:

mysql>SELECT @name := thing FROM limbs WHERE legs = 0;
+----------------+
| @name := thing |
+----------------+
| squid          |
| octopus        |
| fish           |
| phonograph     |
+----------------+
mysql> SELECT @name;
+------------+
| @name      |
+------------+
| phonograph |
+------------+

Nếu câu lệnh trả về không có hàng, không có bài tập nào diễn ra và biến giữ lại giá trị trước đó. Nếu biến chưa được sử dụng trước đây, giá trị đó là

mysql>SELECT @id := cust_id FROM customers WHERE cust_id='
               customer name
               ';
mysql> DELETE FROM orders WHERE cust_id = @id;
mysql> DELETE FROM customers WHERE cust_id = @id;
8:

mysql>SELECT @name2 := thing FROM limbs WHERE legs < 0;
Empty set (0.00 sec)
mysql> SELECT @name2;
+--------+
| @name2 |
+--------+
| NULL   |
+--------+

Để đặt một biến một cách rõ ràng thành một giá trị cụ thể, hãy sử dụng câu lệnh

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
3.
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
3 Cú pháp có thể sử dụng
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
5 hoặc
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
4 để gán giá trị:

mysql>SET @sum = 4 + 7;
mysql> SELECT @sum;
+------+
| @sum |
+------+
|   11 |
+------+

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
3 cũng có thể được sử dụng để gán kết quả
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
9 cho một biến, miễn là bạn viết
CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
9 dưới dạng truy vấn con (nghĩa là trong ngoặc đơn) và nó trả về một giá trị duy nhất. Ví dụ:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
0

Một giá trị biến đã nhất định tồn tại cho đến khi bạn gán cho nó một giá trị khác hoặc cho đến khi kết thúc phiên MySQL của bạn, tùy theo điều kiện nào đến trước.

Tên biến người dùng không nhạy cảm trường hợp:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
1

Ghi chú

Trước MySQL 5.0, tên biến người dùng nhạy cảm với trường hợp.are case-sensitive.

Các biến người dùng chỉ có thể xuất hiện khi các biểu thức được cho phép, không phải là nơi các hằng số hoặc định danh theo nghĩa đen phải được cung cấp. Mặc dù nó rất hấp dẫn khi cố gắng sử dụng các biến cho những thứ như tên bảng, nhưng nó không hoạt động. Ví dụ: bạn có thể cố gắng tạo một tên bảng tạm thời bằng cách sử dụng một biến như sau, nhưng nó đã giành được công việc:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
2

Các biến người dùng là tiện ích mở rộng dành riêng cho MySQL cho SQL tiêu chuẩn. Họ sẽ không làm việc với các công cụ cơ sở dữ liệu khác.

Làm thế nào bạn sẽ lưu trữ kết quả của truy vấn chọn trong một biến trong MySQL?

Để lưu trữ truy vấn kết quả trong một hoặc nhiều biến, bạn sử dụng chọn vào cú pháp biến:..
Chọn C1, C2, C3, ... ....
Chọn Thành phố vào @City từ khách hàng nơi CustomerNumber = 103 ;.
Lựa chọn thành phố;.
Chọn Thành phố, Quốc gia thành @City, @Country từ khách hàng nơi Customernumber = 103 ;.
Chọn @City, @Country ;.

Chúng ta có thể lưu trữ giá trị trong biến trong MySQL không?

Bạn có thể lưu trữ một giá trị trong một biến do người dùng xác định trong một câu lệnh và tham khảo nó sau trong một câu lệnh khác.Điều này cho phép bạn chuyển các giá trị từ câu lệnh này sang câu lệnh khác.Các biến người dùng được viết là @ var_name, trong đó tên biến var_name bao gồm các ký tự chữ và số,., _ và $.. This enables you to pass values from one statement to another. User variables are written as @ var_name , where the variable name var_name consists of alphanumeric characters, . , _ , and $ .

Chúng ta có thể khai báo biến trong truy vấn MySQL không?

Bạn có thể khai báo một biến bằng cách sử dụng @anyvariablename là biến phiên.Để tạo một biến phiên, bạn cần sử dụng lệnh set.. To create a session variable, you need to use SET command.