【问题标题】:MySQL Error Help: Unknown Column in On ClauseMySQL 错误帮助:On 子句中的未知列
【发布时间】:2016-06-14 20:51:43
【问题描述】:

我正在尝试组合一个从多个表中提取数据的查询,但我遇到了一个奇怪的错误:

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 ;

附注我知道这个查询有些冗长,但它是以编程方式组装的,所以字符数与我无关。

【问题讨论】:

  • 表“esjp_layout”中可能存在名为“section_id”的列。但肯定不是在您尝试与特定 ON 子句连接的表“esjp_content”或“esjp_section_refs”中。

标签: mysql syntax


【解决方案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 ;

换句话说,您必须通过将表连接到已在查询中的表来加入表。可以这么说,它们必须按顺序加入。

【讨论】:

    【解决方案2】:

    您在 on 关闭后加入 esjp_layout,如果可能,尝试切换它,以便当 on 子句出现时,表已经加入

       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 
    

    【讨论】:

      【解决方案3】:

      只有在加入后才能使用表。所以切换加入顺序为

      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 ;
      

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 2011-03-06
        • 1970-01-01
        • 2013-01-26
        • 2011-05-03
        • 1970-01-01
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多