我为问题集创建了一个包含6列的数据库(problemId
,a
,b
,c
,d
,rightAnswer
),其中a
,b
,c
,d
存储每个选项的详细信息,rightAnswer
存储正确答案的索引例如a,b,c,d。
现在我想在rightAnswer
中提取正确答案的索引(例如,a),然后从表中选择一个。
这是我的代码:
SELECT (SELECT rightAnswer FROM table WHERE problemId=1) FROM table WHERE problemId=1
但它不起作用。
答案 0 :(得分:1)
您可以使用CASE表达式...
SELECT CASE t.rightanswer
WHEN 'a' THEN t.a
WHEN 'b' THEN t.b
WHEN 'c' THEN t.c
WHEN 'd' THEN t.d
ELSE NULL
END AS rightanswer_val
FROM mytable t
WHERE t.problemid = 1
这将用于"解码"存储在rightanswer
列中的值,并返回存储在相应列中的值。
如果你有一些不可思议的需要"在选择中嵌入一个选择" (正如你问题的标题所示),它可以做到这一点,尽管解决这个问题并不需要。
在SQL中,对标识符的引用必须出现在SQL语句的文本中。标识符的值(列名,表名,函数名等)不能通过执行语句动态生成。如果要从名为col
的列返回值,则该列col
的名称必须出现在实际的SQL文本中。
答案 1 :(得分:0)
您可以使用动态查询。
SET @col_name:= (SELECT rightAnswer FROM `table` WHERE problemId=1);
SET @sql:=CONCAT_WS(' ','SELECT ',@col_name,' FROM `table` WHERE problemId=1');
PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;