首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL变量内容

问MySQL变量内容
EN

Stack Overflow用户
提问于 2016-11-15 10:37:18
回答 1查看 51关注 0票数 0

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

代码语言:javascript
复制
SET @sql_q1 := (CONCAT('(SELECT "Q1" AS quartile,
visit.id FROM carecube.visit order by visit.id LIMIT 1 OFFSET ', @var, ')'));

为什么,当我选择它时,为什么它返回select语句作为文本而不是一个值?

谢谢。

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

'SELECT "Q1“作为四分位数,visit.id从carecube.visit命令被visit.id限制1偏移58‘

我以为我会得到一个数字返回,抵消后的第58行,而不是文本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 10:57:34

在变量(@sql_q1)中生成字符串。顺便说一句,您的字符串是一个MySQL查询,但这并不意味着它在任何方面都很特殊。

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

为了让MySQL将变量(即字符串)的内容解释为查询,可以将其用作准备陈述。

代码语言:javascript
复制
# 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语句中为它们提供值:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40607652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档