Как объявить переменную в том же выражении в MySQL? - PullRequest
0 голосов
/ 09 марта 2020

Как мне создать переменные в MySQL, на которые я могу сослаться в одном выражении?

Работает ли это также для операторов UPDATE и INSERT?

Я спросил об этом, потому что получил много текстовых файлов SQL, где я выполняю отдельные команды, используя Ctrl-Enter из MySQL -Workbench. Если бы это было несколько операторов, мне пришлось бы выбирать команды для выполнения перед нажатием Ctrl-Enter. Это более сложный и подверженный ошибкам.

Прежде чем кто-то спросит: это частная база данных с одним пользователем, и я использую эти сценарии для непосредственного изменения данных, где редактирование через GUI может занять много лет.

Я только что решил, что должен обернуть более сложный код с помощью программы java. Это было хорошее решение. Тем не менее мне нужно решение этого вопроса для менее сложных проблем, когда я не хочу писать код java.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Непонятно, зачем вам это делать в том же заявлении. Легко выполнить два оператора, и это делает код намного проще для написания и понимания. Вы всегда должны учитывать, как разработчик, который сменит вас на работе над вашим кодом, поймет и поддержит его.

SET @variable = 'Value';

SELECT ... FROM your_table WHERE a_column = @variable;

Если вам нужно сделать это в одном утверждении, я бы сделал это следующим образом:

SELECT ... FROM your_table 
CROSS JOIN (SELECT @variable := 'Value') AS _init
WHERE a_column = @variable;

Делая это в производной таблице, присваивание выполняется только один раз. Если вы делаете это в списке выбора, как вы показали в своем решении, оно выполняет присваивание столько раз, сколько строк возвращается внутренним запросом. Это не имеет большого значения, если присваивание для постоянного значения, но если вашей переменной присваивается результат дорогостоящего выражения, оно будет медленным.

0 голосов
/ 09 марта 2020

Ну, я не смог найти решение в Интернете. Но это оказалось ... довольно просто. Просто создайте утверждение, которое обернет ваше утверждение:

select *, @variable:='Value' from (
    select * from your_table inner where @variable=inner.column
) as outer
...