我有3个测验表
cursos
(quizes),其id为PK
preguntas_cursos
(问题),其id为PK,id_curso为FK,与cursos中的id相同(上一张表)
还有第三个表格,其答案为opciones_preguntas_cursos
,其ID为PK,FK preguntas_cursos_id
与preguntas_cursos_id
相同(上一张表)
我想加入这3个:
这是我正在尝试的声明:
SELECT cursos.nombre_curso, pc.curso_id, pc.id AS preg_id, pc.pregunta, opc.id AS resp_id, opc.respuesta, opc.es_correcta
FROM preguntas_cursos AS pc, opciones_preguntas_cursos AS opc, cursos
WHERE pc.id = opc.preguntas_cursos_id
AND cursos.id = pc.curso_id
但是这个查询只是给了我一组只有一个cursos
ID的行,它没有全部显示
我做错了什么,或者最好的方法来完成我想做的事情?
答案 0 :(得分:0)
而不是在where中进行连接,你应该在from中进行连接,它应该是一个左连接。
SELECT cursos.nombre_curso, pc.curso_id, pc.id AS preg_id, pc.pregunta, opc.id AS resp_id, opc.respuesta, opc.es_correcta
FROM preguntas_cursos AS pc LEFT JOIN (opciones_preguntas_cursos AS opc,cursos) ON (pc.id = opc.preguntas_cursos_id AND cursos.id = pc.curso_id)
答案 1 :(得分:0)
我尝试建立你的table schema on SQLFiddle。在你的问题中查看一些信息,查询是一个很大的假设。 [纠正我,如果我错了)。你如何选择在你的情况下使用哪种JOIN?您说要获取与cursos ID相对应的所有记录。您希望仅返回基于公共列的表中常见的选择性记录。左连接只是这样做。通过按每个表的主键定义外键,将refrential完整性添加到表模式时 - 您创建了常用列/引用。
我已经在同一个SQLFiddle中为您提供了一个解决方案查询及其输出,您可以清楚地了解它。如果LEFT JOIN不可用,则必须在查询中运行少量选择,内部联接和联合。所以它节省了大量的麻烦。
SELECT c.id, c.quiz_name,
p.cursos_id, p.question,
o.id,o.answers
FROM preguntas_cursos p
LEFT JOIN
(opciones_preguntas_cursos o, cursos c)
ON (p.id = o.preg_id
AND c.id = p.cursos_id)