当选择一个包含 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/