首页 > 解决方案 > MySQL:在一个语句中混合 SET @variable 和 SELECT

问题描述

看看 SO,我发现了 3 种不同的语法来设置变量,但只有第 3 种有效。你能解释一下为什么吗?

#doesn't work at all (error)
SET @N = 3; --3rd word
SET @delimiter = ' ';
SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
  `test`;

https://www.db-fiddle.com/f/dJXZQT7nQvAcbbfon4HRXr/1

#working not as expected
SELECT @N := 3;
SELECT @delimiter := ' ';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
  `test`;

https://www.db-fiddle.com/f/dJXZQT7nQvAcbbfon4HRXr/2

#working fine  
SELECT 3 INTO @N; 
SELECT ' ' INTO @delimiter;
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
  `test`;

https://www.db-fiddle.com/f/dJXZQT7nQvAcbbfon4HRXr/3

标签: mysql

解决方案


您不应该使用 db-fiddle.com 进行测试

在您的第一个示例中,错误出现在您的评论中。要成为有效的评论,--后面必须跟一个空格。

当你修复它时,所有 3 个在官方 MySQL 命令行客户端上的工作方式完全相同!它仍然不在 db-fiddle.com 上,但就像我说的那样,这根本不重要。您选择哪一个是个人喜好问题,以及您是否想要在命令行上输出。SET不输出,SELECT有。


推荐阅读