我目前在MySql中编写一个函数,要求我能够执行以下某种操作:
SET argNumber = 2;
SELECT x.x_id
FROM x, piv
WHERE x.x_id = concat('piv.x', argNumber)
LIMIT 1;
正如您在上面所看到的那样,我正试图连接起来。'和argNumber的变量值来创建piv.x2,这是表piv中的一列。我遇到的问题是,在我使用concat函数之后,该过程将结果字符串视为数据而不是引用。我该如何解决这个问题?
答案 0 :(得分:0)
应该是(假设piv.x
是varchar
列,您需要先将其转换为正确的类型)
concat(piv.x, '2')
您的查询应该是
SELECT x.x_id
FROM x JOIN piv
ON x.x_id = concat( CAST(piv.x AS VARCHAR), argNumber)
LIMIT 1;
根据您的评论,您需要动态查询。然后像下面这样做
SET @sql =CONCAT("SELECT x.x_id FROM x JOIN piv ON x.x_id = piv.x", argNumber, " LIMIT 1");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 1 :(得分:0)
您需要使用PREPARE
创建动态SQL:
SET argNumber = 2;
PREPARE stmt FROM CONCAT('
SELECT x.x_id
FROM x, piv
WHERE x.x_id = piv.x', argNumber, '
LIMIT 1');
EXECUTE stmt;
要将SELECT
的结果输入变量,您可以在语句中指定一个变量,如下所述:
How to get scalar result from prepared statement?
PREPARE stmt FROM CONCAT('
SELECT @id := x.x_id
FROM x, piv
WHERE x.x_id = piv.x', argNumber, '
LIMIT 1');
执行语句后,变量@id
包含所选的ID。