3

我做了一个表查询是

CREATE TABLE questions (
     _id             INTEGER PRIMARY KEY AUTOINCREMENT
   , question        TEXT
   , correct_answer  TEXT    DEFAULT (null)
   , answer1         TEXT    DEFAULT (null)
   , answer2         TEXT    DEFAULT (null) 
   , answer3         TEXT    DEFAULT (null)
   , answer4         TEXT    DEFAULT (null)
   , difficulty      INTEGER DEFAULT (null) 
   , nid             INTEGER
);

现在想省略 correct_answer 列,并在 answer1 列中做出所有正确的答案,在 answer2、answer3、answer4 中做出其他 3 个不正确的答案。但问题是目前正确的答案可能是四个中的任何一个,所以我无法合并

作为一个例子表就像 在此处输入图像描述

你可以在 answer2 的第一行看到正确答案,第二行的正确答案在 answer4

那么我如何只在 answer1 列中取正确答案,而在 answer2、answer3、answer4 中分别取其他错误答案?

什么将是 sql 查询?或任何其他想法?

4

4 回答 4

5

我会做这样的事情:

insert into question_new (_id, qestion, answer1, answer2, answer3, answer4)
SELECT _id, question, 
correct_answer as answer1, 
if (correct_answer = answer2 , answer1 , answer2) as answer2,
if (correct_answer = answer3 , answer1 , answer3) as answer3,
if (correct_answer = answer4 , answer1 , answer4) as answer4
 FROM questions

简单来说:

  1. answer1 将始终是 correct_answer 列。
  2. answer2/3/4 将是
    • 如果与正确答案不同,则为同一列(与默认表相同)
    • answer1 if 等于正确答案(在 answer1 中有正确答案,因此您需要将错误 answer1 设置在新位置)

更新

使用添加了相同的查询case when

insert into question_new (_id, qestion, answer1, answer2, answer3, answer4)
SELECT _id, question, 
correct_answer as answer1, 
case when correct_answer = answer2 then answer1 else answer2 end as answer2,
case when correct_answer = answer3 then answer1 else answer3 end as answer3,
case when correct_answer = answer4 then answer1  else answer4 end as answer4
 FROM questions
于 2013-05-17T14:10:11.610 回答
4

我会这样做

insert into questions2(_id, qestion, answer1, answer2, answer3, answer4)
select _id, question , correct_answer as answer1,
case when correct_answer = answer1 then answer2 else answer1 end answer2,
case when correct_answer = answer2 then answer3 else answer2 end answer3,
case when correct_answer = answer3 then answer4 else answer3 end answer4
from questions

所以你最终会得到一个新表格,你的问题以所需的格式

于 2013-05-17T14:09:03.420 回答
4

你可以试试这个-

SELECT question, correct_answer,
CASE WHEN answer1 != correct_answer THEN answer1 ELSE answer2 END AS incorrect1,
CASE WHEN (answer1 != correct_answer AND answer2 != correct_answer) THEN answer2 ELSE answer3 END AS incorrect2,
CASE WHEN (answer1 != correct_answer AND answer2 != correct_answer AND answer3 != correct_answer) THEN answer3 ELSE answer4 END AS incorrect3
FROM questions
于 2013-05-17T14:09:39.473 回答
3

有点晚了,但你可以更新你的表而不需要辅助表来存储你想要的数据

UPDATE questions

SET 
answer2 = CASE WHEN answer2 = correct_answer
          THEN answer1 ELSE answer2 END,

answer3 = CASE WHEN answer3 = correct_answer
          THEN answer1 ELSE answer3 END,

answer4 = CASE WHEN answer4 = correct_answer
          THEN answer1 ELSE answer4 END,
answer1 = correct_answer

在这里检查 SQL 小提琴

于 2013-05-17T14:38:18.160 回答