MySQL: встановлення змінної користувача за результатами запиту


197

Чи можливо встановити змінну користувача на основі результату запиту в MySQL?

Що я хочу досягти, - це щось подібне (можна припустити, що обидва USERі GROUPє унікальними):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

Зауважте, що я знаю, що це можливо, але я не хочу робити цього за допомогою вкладених запитів.

Відповіді:


333

Так, але вам потрібно перемістити призначення змінної у запит:

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

Тестовий випадок:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 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)

Зверніть увагу , що для SETяких =або :=може бути використаний в якості оператора присвоєння. Однак усередині інших операторів оператор присвоєння повинен бути, :=а не =тому =, що трактується як оператор порівняння в операторах, які не є SET.


ОНОВЛЕННЯ:

Крім коментарів нижче, ви також можете зробити наступне:

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

3
Btw, чи можете ви придушити вихід першого оператора (як єдине призначення змінної) і показати лише вихід другого запиту?
Авада Кедавра

3
@Avada: Оновлено мою відповідь альтернативою, яка не дає результату для призначення змінної.
Даніель Вассалло

1
@DanielVassallo, Є також select grop into @group from user limit 1.
Pacerier

@DanielVassallo дуже дякую Стаття "INTO" дуже корисна. Я шукав налаштування mysql var from select, не повертаючи select. ДЯКУЮ!
Луїс Антоніо Пестана

68

Просто додайте дужки навколо запиту:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;

Це призводить Subquery returns more than 1 rowдо мене
timbroder

1
@timbroder Просто додайте LIMIT 1 до запиту. У будь-якому випадку, я запропонував редагувати, щоб виправити це.
Юкко

12

Спочатку давайте подивимось, як ми можемо визначити змінну в mysql

Щоб визначити змінну в mysql, вона повинна починатися з "@", як @ {змінної імені}, а цього "{ім'я змінної}", ми можемо замінити його нашим змінним іменем.

Тепер, як призначити значення змінної в mysql. Для цього у нас є багато способів зробити це

  1. Використання ключового слова "SET".

Приклад: -

mysql >  SET @a = 1;
  1. Без використання ключового слова 'SET' та використання ': ='.

Приклад: -

mysql > @a:=1;
  1. За допомогою оператора 'SELECT'.

Приклад: -

mysql > select 1 into @a;

Тут @a - визначена користувачем змінна, і 1 буде призначено в @a.

Тепер, як отримати або вибрати значення @ {змінної_назви}.

ми можемо використовувати оператор select, як

Приклад: -

mysql > select @a;

він покаже вихід і покаже значення @a.

Тепер, як призначити значення з таблиці в змінній.

Для цього ми можемо використовувати два твердження типу: -

1.

@a := (select emp_name from employee where emp_id = 1);
select emp_name into @a from employee where emp_id = 1;

Завжди будьте обережні, em_name має повернути одне значення, інакше це призведе до помилки в операторах цього типу.

зверніться до цього: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


7

Використовуйте цей спосіб, щоб результат не відображався під час запуску збереженої процедури.

Запит:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.