2016-06-14 79 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 ;