联表查询,主表随机,子表查询所有内容(如试卷问题随机发布,这些问题的答案全部显示)

本文详细介绍了如何在Mybatis中使用Mysql的联表查询和随机功能,以实现问卷系统中试题与答案的关联随机生成,同时展示了子查询的运用,确保了问题和答案的一一对应关系。
摘要由CSDN通过智能技术生成

Mybatis联表查询,主表随机子表相关全查

过程详解

总所周知,Mysql具有联表查询功能,也有随机功能,现在我们需要完成一个问卷发布功能,问卷中的试题全部都是随机生成的,而这些问题所关联的答案不能随机生成(那不就乱套了嘛),这里就需要用到联表查询功能

Mysql随机

首先,先简单介绍一下Mysql的随机,order by Rand()

SELECT * FROM questions ORDER BY RAND() LIMIT 4

示例如上,这段语句翻译过来就是在questions表中随机抽取4个记录(行) LIMIT就是用来约束它的数量

联表查询

目前来说有多种方式联表查询,我这里不做过多介绍,仅举个别简单的例子

SELECT questions.*,questions_answers.* FROM questions,questions_answers

上述语句查询questions表和question_answers表的全部内容,但二者之间没有关联

SELECT questions.*,questions_answers.* FROM questions,questions_answers
WHERE questions.id = questions_answers.question_id

加上一个条件,就可以使问题和答案关联起来

SELECT questions.*,questions_answers.* FROM questions
JOIN questions_answers
ON questions.id = questions_answers.question_id

又或者使用JOIN的方式

子查询

同样的,Mysql也有子查询的功能

SELECT q.*,qa.*
FROM (
SELECT * FROM questions ORDER BY RAND() LIMIT 4
) as q,
questions_answers as qa

代码示例如上,但是这个例子并不妥当,因为它是输出问题表和答案表的全部内容

SELECT q.*,qa.*
FROM (
SELECT * FROM questions ORDER BY RAND() LIMIT 4
) as q,
questions_answers as qa
WHERE q.id = qa.question_id

此时我们加上限制条件where就正常了

SELECT q.*,qa.*
FROM (
SELECT * FROM questions WHERE question_type=0 ORDER BY RAND() LIMIT 5
) as q
JOIN questions_answers as qa ON q.id = qa.question_id

或者使用join的方式

最后提醒:不要忘记了别名,没有别名会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值