2016-06-14 12 views
0

私は一緒に複数のテーブルからデータを引き出し、クエリを置くしようとしているが、私は奇妙なエラーが取得しています:MySQLのエラーヘルプ:ON句で不明なカラム

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

に変更します。「section_id」という名前の列がおそらくテーブル「esjp_layout」に存在します。しかし、確かにその特定の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 ; 

。彼らは話すために、順番に結合する必要があります。句の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

ありがとう、それはトリックでした! –

0

あなたが近くに後esjp_layout参加している、あなたはそれに参加した後にのみテーブルを使用できるように、可能な場合は、これを切り替えてみてください。したがって、結合順序を

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

に接合する際

関連する問題