MySQL变量内容

时间:2016-11-15 10:37:18

标签: 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语句来选择变量时,它只是在变量中输出select语句并打印出来

' SELECT" Q1" AS四分位数, visit.id来自carecube.visit,请访问visit.id LIMIT 1 OFFSET 58'

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

1 个答案:

答案 0 :(得分:1)

您在变量(@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;