当选择一个MySQL变量时,它包含select语句和另一个变量的级联,如下所示:
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行,而不是文本。
发布于 2016-11-15 10:57:34
在变量(@sql_q1)中生成字符串。顺便说一句,您的字符串是一个MySQL查询,但这并不意味着它在任何方面都很特殊。
当您运行SELECT @sql_q1;时,您将得到变量(字符串)的内容,而不是其他任何内容。
为了让MySQL将变量(即字符串)的内容解释为查询,可以将其用作准备陈述。
# 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;https://stackoverflow.com/questions/40607652
复制相似问题