m0_70017508 2022-07-01 15:39 采纳率: 0%
浏览 107
已结题

MYSQL 数据多选题答案对比问题

现在有两个表:

表1:question

| id| ltem | right_answer |
| 1 | XX |  ["A","C","D"]  |
| 2 | BB | ["B","C" ] |


表2:report

| id  |qid | answer         |  status      |
| 1   | 1   | ["A","B","C"] | wrong       |
| 2   | 2   | ["B","C" ]    | right      |
| 3   | 1   | ["A","C"]     | past_right |

表2的 status 字段的值 是根据 表2的answer的值 对比表1 right_answer 的值,表2的qid对应表1的id

有3中情况,正确,错误,部分正确(right,wrong,past_right)

mysql 怎么写,根据表2的answer 得出 status?

  • 写回答

5条回答 默认 最新

  • 西行妖开花了 2022-07-01 16:43
    关注
    获得0.10元问题酬金

    在业务代码里面处理

    评论
  • 微笑精灵 2022-07-01 16:52
    关注
    获得0.54元问题酬金

    你还是用代码写吧,代码很好写,一个list的包含就行,如果你sql,你得case when then 。
    然后条件是字符串切分和字符串包含。
    先不说多恶心,他也太=慢啊。
    况且从原则上来讲,数据库不应该参与运算

    评论
  • 渴望技术的猿 2022-07-01 16:59
    关注

    SQL做不了的或者太复杂就用代码去实现

    评论
  • yy64ll826 2022-07-01 22:56
    关注

    自定义函数

    评论
  • Jax_u90b9 2022-07-06 16:33
    关注
    获得0.32元问题酬金
    
    
    ```sql
    SELECT
        a.*,
        ( 
        CASE WHEN a.answer = a.right_answer THEN 'right' 
             WHEN  INSTR(REPLACE(a.right_answer,"]",""),REPLACE(a.answer,"]","")) > 0 THEN 'past_right' 
             ELSE 'wrong' END 
        ) STATUS 
    FROM
        ( SELECT r.*, q.right_answer FROM report r LEFT JOIN question q ON r.qid = q.id ) a
    
    

    ```

    评论

报告相同问题?

问题事件

  • 系统已结题 7月9日
  • 赞助了问题酬金2元 7月1日
  • 修改了问题 7月1日
  • 修改了问题 7月1日
  • 展开全部

悬赏问题

  • ¥60 关于海信电视聚好看安装应用的问题
  • ¥15 vue引入sdk后的回调问题
  • ¥15 求一个智能家居控制的代码
  • ¥15 ad软件 pcb布线pcb规则约束编辑器where the object matpcb布线pcb规则约束编辑器where the object matchs怎么没有+15v只有no net
  • ¥15 虚拟机vmnet8 nat模式可以ping通主机,主机也能ping通虚拟机,但是vmnet8一直未识别怎么解决,其次诊断结果就是默认网关不可用
  • ¥20 求各位能用我能理解的话回答超级简单的一些问题
  • ¥15 yolov5双目识别输出坐标代码报错
  • ¥15 这个代码有什么语法错误
  • ¥15 给予STM32按键中断与串口通信
  • ¥15 使用QT实现can通信