用于从3个表中获取数据的mysql语句

时间:2012-11-16 15:32:48

标签: mysql

我有3个测验表

cursos(quizes),其id为PK

preguntas_cursos(问题),其id为PK,id_curso为FK,与cursos中的id相同(上一张表)

还有第三个表格,其答案为opciones_preguntas_cursos,其ID为PK,FK preguntas_cursos_idpreguntas_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的行,它没有全部显示

我做错了什么,或者最好的方法来完成我想做的事情?

2 个答案:

答案 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)