【问题标题】:How to declare a variable within the same statement in MySQL?如何在 MySQL 的同一语句中声明变量?
【发布时间】:2020-06-21 12:02:02
【问题描述】:

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

这是否也适用于 UPDATE 和 INSERT 语句?

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

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

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

【问题讨论】:

    标签: mysql mysql-variables


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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;
      

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

      【讨论】:

      • 好吧,我有一个包含多个语句的文本文件。我通过按 Ctrl-Enter 手动执行此文件中的单个语句。如果是多个语句,我将不得不选择首先执行的文本。 -- 不过会尝试你的解决方案。
      • @JPT 您的问题中都没有出现。
      • 你们俩都是对的。我用 Java 包装了 SQL,现在我有了一些简单的 SQL 语句,并且可以完全控制发生的事情;)
      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2018-04-15
      • 2014-04-12
      • 1970-01-01
      • 2013-07-09
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多