我想从表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);
i
、j
是整数,并且在循环中递增。 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);
预先感谢您的帮助。
最佳答案
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/