枢轴表水平到垂直两个表之间的MySQL

枢轴表水平到垂直两个表之间的MySQL

我有一个问答,下面是我的表格结构
从待测问题中选择*;

q_id |   que          | opt1  |   opt2 |   opt3 |   opt4 |   ans
------------------------------------------------------------------
 1   |  what is this? |  cat  |   dog  |   owl  |   cow  |   opt2
 2   |  what is that? |  man  |   pig  |   bat  |   rat  |   opt4
 3   |  who is this?  |  ice  |   flea |   dirt |   lion |   opt1
 4   |  who is that?  |  goat |   meat |   kid  |   gin  |   opt3

从tbl_用户答案中选择*
 uid |   qid |   submit_ans |   correct_ans
-------------------------------------------------
  1  |    1  |     opt2     |       opt2
  1  |    2  |     opt3     |       opt4
  1  |    3  |     opt4     |       opt1
  1  |    4  |     opt1     |       opt3

我希望我的结果是这样的。
qid  |  submit_ans |  submittext |  correct_ans |  correcttext
-------------------------------------------------------------
 1   |     opt2    |    dog      |     opt2     |     dog
 2   |     opt3    |    bat      |     opt4     |     rat
 3   |     opt4    |   lion      |     opt1     |     ice
 4   |     opt1    |   goat      |     opt3     |     kid

我想不出任何办法让它看起来像这样。我从来没有做过旋转。有什么查询可以让我得到结果吗?

最佳答案

您需要像这样连接表和用例表达式:

select
  q.q_id qid, u.submit_ans submit_ans,
  case u.submit_ans
    when 'opt1' then q.opt1
    when 'opt2' then q.opt2
    when 'opt3' then q.opt3
    when 'opt4' then q.opt4
  end submit_text,
  u.correct_ans,
    case u.correct_ans
    when 'opt1' then q.opt1
    when 'opt2' then q.opt2
    when 'opt3' then q.opt3
    when 'opt4' then q.opt4
  end correcttext
from tbl_test_question q inner join tbl_user_answer u
on u.qid = q.q_id

请参见demo
结果:
> qid | submit_ans | submit_text | correct_ans | correcttext
> --: | :--------- | :---------- | :---------- | :----------
>   1 | opt2       | dog         | opt2        | dog
>   2 | opt3       | bat         | opt4        | rat
>   3 | opt4       | lion        | opt1        | ice
>   4 | opt1       | goat        | opt3        | kid

关于mysql - 枢轴表水平到垂直两个表之间的MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58748467/

10-11 12:17