选择包含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行之后偏移而不是文本。
答案 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;