0

我有 3 张桌子可供测验

cursos(测验)ID 为 PK

preguntas_cursos(问题) id 为 PK 并且 id_curso 为 FK 与 cursos 中的 id 相同(上表)

还有一个答案的第三个表,opciones_preguntas_cursos其 id 为 PK,FKpreguntas_cursos_idpreguntas_cursos_id(上一张表)相同

我想把这三个一起加入:

这是我正在尝试的声明:

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            

但是这个查询只是给了我一组只有一个 id 的行cursos,它没有显示它们

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

4

2 回答 2

0

而不是在哪里进行连接,你应该从他那里做,它应该是一个左连接。

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)
于 2012-11-16T15:48:33.030 回答
0

我试图在 SQLFiddle 上构建您的表模式。在您的问题中查询一些信息,这是一个假设。[如果我错了,请纠正我)。您如何选择在您的案例中使用哪个 JOIN?您是说要获取与 cursos ID 对应的所有记录。您希望仅返回基于公共列的表中常见的选择性记录。左连接就是这样做的。当您通过通过每个表的主键定义外键来将引用完整性添加到表模式时 - 您创建了该公共列/引用。

我在同一个 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)
于 2012-11-16T17:15:27.993 回答