2016-06-14 77 views
0

我想放在一起,從多個表中提取數據的查詢,但我發現了一個奇怪的錯誤:MySQL錯誤說明:在第未知列

Error Code: 1054. Unknown column 'esjp_layout.section_id' in 'on clause'

表和列引用當然存在,並且拼寫正確。這是我正在處理的查詢。任何想法有什麼不對?

SELECT 
    esjp_section_refs.section_label, 
    esjp_content.primary_key, esjp_content.content, esjp_content.summary_id, 
    esjp_role_refs.role_label, 
    esjp_users.first_name, esjp_users.last_name, 
    FROM_UNIXTIME(esjp_content.sys_time) 
FROM esjp_content 
    INNER JOIN esjp_section_refs ON esjp_layout.section_id = esjp_section_refs.primary_key 
    INNER JOIN esjp_layout ON esjp_content.primary_key = esjp_layout.content_id 
    INNER JOIN esjp_role_refs ON esjp_content.role_ref = esjp_role_refs.primary_key 
    INNER JOIN esjp_users ON esjp_content.author_id = esjp_users.primary_key 
WHERE esjp_layout.primary_key = 1 
ORDER BY esjp_layout.section_id ASC, esjp_layout.position ASC ; 

P.S.我知道這個查詢有點羅嗦,但它是以編程方式組裝的,所以字符數不關心我。

+0

表「esjp_layout」中可能存在名爲「section_id」的列。但是,當然不是在您試圖使用特定ON子句_連接的表「esjp_content」或「esjp_section_refs」中。 – arkascha

回答

1

問題是您的ON子句中正在加入的表尚未在查詢中。

相反:

SELECT 
    esjp_section_refs.section_label, 
    esjp_content.primary_key, esjp_content.content, esjp_content.summary_id, 
    esjp_role_refs.role_label, 
    esjp_users.first_name, esjp_users.last_name, 
    FROM_UNIXTIME(esjp_content.sys_time) 
FROM esjp_content 
    INNER JOIN esjp_layout ON esjp_content.primary_key = esjp_layout.content_id 
    INNER JOIN esjp_section_refs ON esjp_layout.section_id = esjp_section_refs.primary_key  
    INNER JOIN esjp_role_refs ON esjp_content.role_ref = esjp_role_refs.primary_key 
    INNER JOIN esjp_users ON esjp_content.author_id = esjp_users.primary_key 
WHERE esjp_layout.primary_key = 1 
ORDER BY esjp_layout.section_id ASC, esjp_layout.position ASC ; 

在您必須通過其連接到一個表已在您的查詢在表中加入其他的話。可以這麼說,他們必須按順序加入。

+0

謝謝,那就是訣竅! –

0

你以後就接近加盟esjp_layout,嘗試,如果有可能,所以開關這個當上條hists,該表已經加入了對

FROM_UNIXTIME(esjp_content.sys_time) 
    FROM esjp_content 
    INNER JOIN esjp_section_refs ON **esjp_layout.section_id** = esjp_section_refs.primary_key 
    INNER JOIN **esjp_layout** ON esjp_content.primary_key = esjp_layout.content_id 
0

您可以使用一個表,你加入後,才。因此,將連接順序切換爲

SELECT 
    esjp_section_refs.section_label, 
    esjp_content.primary_key, esjp_content.content, esjp_content.summary_id, 
    esjp_role_refs.role_label, 
    esjp_users.first_name, esjp_users.last_name, 
    FROM_UNIXTIME(esjp_content.sys_time) 
FROM esjp_content 
    INNER JOIN esjp_layout ON esjp_content.primary_key = esjp_layout.content_id 
    INNER JOIN esjp_section_refs ON esjp_layout.section_id = esjp_section_refs.primary_key   
    INNER JOIN esjp_role_refs ON esjp_content.role_ref = esjp_role_refs.primary_key 
    INNER JOIN esjp_users ON esjp_content.author_id = esjp_users.primary_key 
WHERE esjp_layout.primary_key = 1 
ORDER BY esjp_layout.section_id ASC, esjp_layout.position ASC ;