sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Ställ in användarvariabel från resultatet av frågan

Ja, men du måste flytta variabeltilldelningen till frågan:

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

Testfall:

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

Resultat:

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)

Observera att för SET , antingen = eller := kan användas som uppdragsoperatör. Men inuti andra satser måste tilldelningsoperatorn vara := och inte = eftersom = behandlas som en jämförelseoperator i icke-SET-satser.

UPPDATERING:

Utöver kommentarerna nedan kan du också göra följande:

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


  1. En kortare icke-upprepande alfanumerisk kod än UUID i MySQL

  2. Använda tidszoner i en PHP-webbapplikation

  3. HEXTORAW() Funktion i Oracle

  4. Skicka ett fel som förhindrar en tabelluppdatering i en MySQL-utlösare