Mysql 基于单元格值的动态列选择

Mysql 基于单元格值的动态列选择,mysql,sql,sqlite,Mysql,Sql,Sqlite,我有一个形状的问题数据库 ID , Question , Answer1 , Answer2 , Answer3 , Answer4 , True 其中“True”是正确答案的索引: True = 0 --> Answer1 .... True = 3 --> Answer4 我只需要选择问题和正确答案,这是我目前得到的结果: SELECT Question , 'Answer' || (True+1) From Questions 但它返回问题和“回答1”或“回答2”。。。i

我有一个形状的问题数据库

ID , Question , Answer1 , Answer2 , Answer3 , Answer4 , True
其中“True”是正确答案的索引:

True = 0 --> Answer1
....
True = 3 --> Answer4
我只需要选择问题和正确答案,这是我目前得到的结果:

SELECT Question , 'Answer' || (True+1) From Questions

但它返回问题和“回答1”或“回答2”。。。ie:i不需要列的名称,它的值可以在MySQL中使用
CASE

SELECT  Question,
        CASE True
            WHEN 0 THEN Answer1
            WHEN 1 THEN Answer2
            WHEN 2 THEN Answer3
            WHEN 3 THEN Answer4
        END AS Answer
FROM    tableName


您可以在MySQL中使用
CASE

SELECT  Question,
        CASE True
            WHEN 0 THEN Answer1
            WHEN 1 THEN Answer2
            WHEN 2 THEN Answer3
            WHEN 3 THEN Answer4
        END AS Answer
FROM    tableName


如果可以重构数据库架构,可以将其更改为:

QuestionID,QuestionText,AnswerID,AnswerText,IsCorrect

要获得正确答案,请使用以下查询:

从问题ID=X且IsCorrect=True的问题中选择*

要获取所有答案,请使用以下查询:

从问题ID=X的问题中选择*


现在,您可以为一个问题提供任意多或任意少的答案。

如果您可以重构数据库架构,您可以将其更改为:

QuestionID,QuestionText,AnswerID,AnswerText,IsCorrect

要获得正确答案,请使用以下查询:

从问题ID=X且IsCorrect=True的问题中选择*

要获取所有答案,请使用以下查询:

从问题ID=X的问题中选择*


现在你可以对一个问题有任意多或任意少的答案。

@workoverflow我已经更新了答案。在sqlite上试试哪一个可以用。非常感谢,第二个可以用在mySQL和sqlite上,但是第一个只能用在mySQL上。只是想知道,有没有一种方法可以不用列出所有的情况就可以用呢?喜欢我尝试的方式吗?@workeverflow我已经更新了答案。在sqlite上试试哪一个可以用。非常感谢,第二个可以用在mySQL和sqlite上,但是第一个只能用在mySQL上。只是想知道,有没有一种方法可以不用列出所有的情况就可以用呢?就像我试着做的那样?事实上数据库是巨大的,重构它是浪费时间的,虽然它可以通过查询来完成,但是谢谢你的想法。是的,总是有两种答案,“如果我有更多的时间,这将是伟大的”答案和“这是现在的作品”答案实际上数据库是巨大的,这将是一个浪费时间的重构,而它可以通过查询完成,但感谢你的想法。是的,总是有两种答案,“如果我有更多的时间,这将是伟大的”答案和“这是现在的作品”答案XD