0

クイズ用のテーブルが 3 つあります

cursosPK という ID を持つ (クイズ)

preguntas_cursos(質問) PK として id を持ち、cursos の id と同じ id_curso を FK として持つ (前の表)

opciones_preguntas_cursosPK としての ID と(前のテーブル)preguntas_cursos_idと同じ FK を持つ回答の 3 番目のテーブルがあります。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            

しかし、このクエリは、 の id が 1 つだけの行のセットを提供しているだけでcursos、すべてを表示しているわけではありません

私は何を間違っていますか、または私がやろうとしていることを達成するための最良の方法は何ですか???

4

2 に答える 2

0

where で結合を行う代わりに、int he 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)
于 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 に答える