2012-11-16 48 views
0

我有一個測驗MySQL的語句獲取數據來自3個表

cursos(測驗)3個表有一個ID爲PK

preguntas_cursos(問題),有一個ID爲PK並具有id_curso作爲FK那一樣cursos的ID(上表)

和那裏有一個第三個表有一個ID爲PK和FK preguntas_cursos_id這是一樣preguntas_cursos_id(上表)的答案opciones_preguntas_cursos

我想跟你一起加入這場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的cursos,它不是向他們展示全部

我做錯了什麼,或最新的方法來完成我想要做的?

+0

可以請你建立在http://sqlfiddle.com/數據表和文章的網址?謝謝 – amphibient

+0

你想加入檢索什麼信息? – bonCodigo

回答

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) 
0

我試圖建立你的table schema on 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) 
相關問題