MySQL 变量内容

标签 mysql sql

当选择一个包含 select 语句和另一个变量的串联的 MySQL 变量时,如下所示:

SET @sql_q1 := (CONCAT('(SELECT "Q1" AS quartile,
visit.id FROM carecube.visit order by visit.id LIMIT 1 OFFSET ', @var, ')'));

为什么,当我选择这个时,为什么它以文本而不是值的形式返回选择语句?

谢谢。

编辑:当我运行以下 select 语句来选择变量时,它只打印变量中的 select 语句并打印出

'选择“Q1”作为四分位数, Visit.id FROM carecube.visit order by Visit.id LIMIT 1 OFFSET 58'

我假设我会得到一个返回的数字,在第 58 行之后偏移,而不是文本。

最佳答案

您在变量中生成一个字符串 (@sql_q1)。顺便说一句,您的字符串是一个 MySQL 查询,但这并没有使其变得特别。

当您运行SELECT @sql_q1;时,您将获得变量的内容(字符串),而不会获得其他内容。

为了告诉 MySQL 将变量的内容(即字符串)解释为查询,您可以将其用作 prepared statement .

# Generate the query in a variable
SET @sql_q1 := CONCAT(
    'SELECT "Q1" AS quartile, visit.id FROM carecube.visit order by visit.id LIMIT 1 OFFSET ',
    @var
);

# Use the content of the variable to create a prepared statement
PREPARE stmt1 FROM @sql_q1;

# Run the prepared statement
EXECUTE stmt1;

# Cleanup
DEALLOCATE PREPARE stmt1;

您甚至不需要生成固定的查询;您可以使用值占位符并在 EXECUTE 语句中为其提供值:

SET @sql_q2 := 'SELECT "Q1" AS quartile, visit.id FROM carecube.visit order by visit.id LIMIT 1 OFFSET ?';
PREPARE stmt2 FROM @sql_q2;
EXECUTE stmt2 USING @var;
DEALLOCATE PREPARE stmt2;

关于MySQL 变量内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607652/

相关文章:

mysql - 按条件排序到字段

mysql - 如何将所有数据库从INNODB迁移到MARIADB?

PHP:在报告中显示 WMS 的按日期库存

mysql - SQL 中重复字符串时的子字符串索引

sql - 查询以将相同的 ID 分配给插入的行,如果它已存在于表中

sql - 如何反转 MySQL 中的默认顺序?

sql - 使用 SSIS 包加载数据时理解间歇性不一致的问题

mysql - 尝试使用用户定义的变量获取连接的主键

MySQL - 防止一行引用自身

SQL分组interescting/overlapping行