2014-02-06 128 views
0

我試圖解決我的嵌套查詢,我有這些表:SQL:三重嵌套多對多查詢

cdu_groups_blocks 
------------------------ 
|id |group_id |block_id| 
------------------------ 
|1 |1  |1  | 
|2 |1  |2  | 
|3 |1  |3  | 
------------------------ 

cdu_blocks:      cdu_blocks_sessions: 
--------------------------   --------------------------- 
|id |name  |enabled |   |id |block_id |session_id | 
--------------------------   --------------------------- 
|1 |block_1 |1  |   |1 |1  |1   | 
|2 |block_2 |1  |   |2 |1  |2   | 
|3 |block_3 |1  |   |3 |2  |3   | 
--------------------------   |4 |2  |4   | 
            |5 |3  |5   | 
            |6 |3  |6   | 
            --------------------------- 

cdu_sessions:      cdu_sessions_lessons 
--------------------------   ---------------------------- 
|id |name  |enabled |   |id |session_id |lesson_id | 
--------------------------   ---------------------------- 
|1 |session_1 |1  |   |1 |1   |1   | 
|2 |session_2 |1  |   |2 |1   |2   | 
|3 |session_3 |1  |   |3 |2   |3   | 
|4 |session_4 |0  |   |4 |4   |4   | 
|5 |session_5 |1  |   |5 |4   |5   | 
|6 |session_6 |0  |   |6 |5   |6   | 
--------------------------   ---------------------------- 

cdu_lessons: 
-------------------------- 
|id |name  |enabled | 
-------------------------- 
|1 |lesson_1 |1  | 
|2 |lesson_2 |1  | 
|3 |lesson_3 |1  | 
|4 |lesson_4 |1  | 
|5 |lesson_5 |0  | 
|6 |lesson_6 |0  | 
-------------------------- 

這是一個多到許多可鏈接到其他許多一對多鏈接到另一個多對多。

本質上我想獲得與特定group_id相關的所有lesson_id(s)。

到目前爲止,我有這一點,但它拋出了各種SQL錯誤:

SELECT b.* FROM 
(
    SELECT block_id, group_id FROM cdu_groups_blocks 
    JOIN cdu_blocks ON cdu_blocks.id = cdu_groups_blocks.block_id 
    WHERE group_id = $group_id 
    AND enabled = 1 
) AS b 
INNER JOIN 
(
    SELECT l.* FROM 
    (
     SELECT session_id, block_id FROM cdu_blocks_sessions 
     JOIN cdu_sessions ON cdu_sessions.id = cdu_blocks_sessions.session_id 
     AND enabled = 1 
) AS s 
INNER JOIN 
(
    SELECT lesson_id, session_id FROM cdu_sessions_lessons 
    JOIN cdu_lessons ON cdu_lessons.id = cdu_sessions_lessons.lesson_id 
    WHERE enabled = 1 
) AS l 
WHERE s.session_id = l.session_id 
) AS sl 
WHERE sl.block_id = g.block_id 

任何幫助,將不勝感激!

+0

這不是預言,我猜。你能發佈一些錯誤嗎? –

+0

'where子句'中的未知列'sl.block_id' – user3241112

+0

加上g.block_id – wildplasser

回答

0

sl.block_id小號表中的第一選擇內部SL子查詢中。

只是明白了。變化:

SELECT l.* FROM ... 

SELECT l.*, s.block_id FROM ... 
+0

的相同內容歡迎您 –