Создайте переменную в скрипте SQL перед выполнением запросов - PullRequest
1 голос
/ 14 января 2020

У меня есть следующий фрагмент

select user_id into @selected_user from users where mail = 'mymail@gmail.com';
select * from kc_network_user where user_id = 'previous_id';

, который я хочу изменить, чтобы он был параметри c. Я нашел следующие ресурсы:

  1. Использование переменных в SQL script
  2. Как объявить переменную в MySQL?
  3. Объявление переменных - MySQL Workbench выдает ошибку с DECLARE

Вот что я сделал:

 select @user_mail := 'mymail@gmail.com'; #1
select @user_mail; #2
select user_id into @selected_user from user where mail = @user_mail; #3
select @selected_user;
select * from user_network where user_id = @selected_user; #4

В select #1 Я также попробовал следующее:

set @user_mail = 'mymail@gmail.com';

select #2 возвращает правильное значение, поэтому переменная инициализируется.
select #3 возвращает следующую ошибку:

Код ошибки: 1267. Недопустимое сочетание параметров сортировки (utf8mb4_unicode_ci, IMPLICIT) и (utf8mb4_general_ci, IMPLICIT) для операции '='

Пока select #4 работает правильно (если я установил параметр mail с буквальным значением).

В чем разница между этими запросами? Как установить переменную перед выполнением запроса?

1 Ответ

0 голосов
/ 14 января 2020

Я не понимаю, почему не просто

select * 
from user_network
join user using (user_id)
where user.mail = 'mymail@gmail.com';

Если вам нужно установить указанные переменные дополнительно (но по какой причине?), Тогда используйте

select *, (@selected_user := user.user_id) 
from user_network
join user using (user_id)
where user.mail = (@user_mail := 'mymail@gmail.com');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...