0

如何在 MySQL 中创建可以在同一语句中引用的变量?

这也适用于 UPDATE 和 INSERT 语句吗?

我问这个是因为我有很多 SQL 文本文件,我在其中使用 MySQL-Workbench 中的 Ctrl-Enter 执行单个命令。如果是多个语句,我必须在按 Ctrl-Enter 之前选择要执行的命令。这更复杂且容易出错。

在有人问之前:这是一个具有单个用户的私有数据库,我使用这些脚本直接修改数据,通过 GUI 进行编辑需要很长时间。

我刚刚决定应该用 java 程序包装更复杂的代码。这是一个很好的决定。对于我不想编写java代码的不太复杂的问题,我仍然需要解决这个问题。

4

2 回答 2

1

目前尚不清楚为什么需要在同一个语句中执行此操作。运行两条语句很容易,它使代码更容易编写和理解。您应该始终考虑成功处理您的代码的开发人员将如何理解和维护它。

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;

通过在派生表中执行此操作,它只执行一次分配。如果您像在解决方案中显示的那样在选择列表中执行此操作,则分配的次数与内部查询返回的行数一样多。如果赋值是针对一个常量值,这没什么大不了的,但是如果你的变量被赋值为一个代价高昂的表达式的结果,它会很慢。

于 2020-03-09T15:05:07.260 回答
0

好吧,我无法在网上找到解决方案。但结果却是……相当简单。只需创建一个包含您的语句的语句:

select *, @variable:='Value' from (
    select * from your_table inner where @variable=inner.column
) as outer
于 2020-03-09T15:01:54.707 回答