mysql - 变量不被它的值替换

标签 mysql sql mariadb

我想从表AnswerSets插入数据

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| Id    | int(11) | YES  |     | NULL    |       |
| Q1    | int(11) | YES  |     | NULL    |       |
| Q2    | int(11) | YES  |     | NULL    |       |
| Q3    | int(11) | YES  |     | NULL    |       |
[...]
+-------+---------+------+-----+---------+-------+

到T_ANSWER_SET。

+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| U_ID   | int(11) | YES  |     | NULL    |       |
| Q_ID   | int(11) | YES  |     | NULL    |       |
| ANSWER | int(11) | YES  |     | NULL    |       |
+--------+---------+------+-----+---------+-------+

因此,我在过程的循环中使用以下查询:

INSERT INTO T_ANSWER_SET (U_ID, Q_ID, ANSWER)
SELECT i, j, (SELECT c FROM AnswerSets WHERE Id = i);

ij 是整数,并且在循环中递增。 c 是我想要从中获取数据的 AnswerSets 列的名称(如“Q10”)。但我总是得到这个:

+------+------+--------+
| U_ID | Q_ID | ANSWER |
+------+------+--------+
|    1 |    1 |      0 |
|    1 |    2 |      0 |
|    1 |    3 |      0 |
[...]
+------+------+--------+

我希望查询对 i =3、j = 10 和 c = 'Q10' 执行什么操作:

INSERT INTO T_ANSWER_SET (U_ID, Q_ID, ANSWER)
SELECT 3, 10, (SELECT Q10 FROM AnswerSets WHERE Id = 3);

预先感谢您的帮助。

最佳答案

尝试PREPARE Statement :

MariaDB [(none)]> SET @`i` := 3,
    ->     @`j` := 1,
    ->     @`c` := '`Q10`';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SET @`stmt` := CONCAT('
    '> INSERT INTO `T_ANSWER_SET` (`U_ID`, `Q_ID`, `ANSWER`)
    '> SELECT ', @`i`, ', ', @`j`, ', (SELECT ', @`c`, '
    '>                                 FROM `AnswerSets`
    '>                                 WHERE `Id` = ', @`i`, ')
    '> ');
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SELECT @`stmt`;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @`stmt`                                                                                                                                                                              |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 
INSERT INTO `T_ANSWER_SET` (`U_ID`, `Q_ID`, `ANSWER`)
SELECT 3, 1, (SELECT `Q10`
              FROM `AnswerSets`
              WHERE `Id` = 3)
 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> -- PREPARE `stmt` FROM @`stmt`;
MariaDB [(none)]> -- EXECUTE `stmt`;
MariaDB [(none)]> -- DEALLOCATE PREPARE `stmt`;

关于mysql - 变量不被它的值替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44761411/

相关文章:

mysql - 从 MySQL 中删除重复记录

php - 将元素同步到 Laravel 上的子元素

c++ - Oracle OCCI 'select count(*)' 结果获取

php - mysqli_fetch_array($link, $query) 直接查询数据库时未输出预期结果

mysql - laravel 5.8 连接第二个数据库时出错

php - 查询不适用于表单验证器

php - 使用 PHP 在 HTML 中显示下拉列表

sql - 如何查找sql​​ server表的三个字段中出现次数最多的单词

sql - 识别表中的重复数据

MySQL:内存不足/MariaDB