mysql:未能将select嵌入select中

时间:2016-09-30 04:29:17

标签: mysql

我为问题集创建了一个包含6列的数据库(problemIdabcdrightAnswer),其中abcd存储每个选项的详细信息,rightAnswer存储正确答案的索引例如a,b,c,d。 现在我想在rightAnswer中提取正确答案的索引(例如,a),然后从表中选择一个。 这是我的代码:

SELECT (SELECT rightAnswer FROM table WHERE problemId=1) FROM table WHERE problemId=1

但它不起作用。

2 个答案:

答案 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;