MySQL报错#1054:ON子句中'texts.filename'列未知的问题解决
MySQL关联查询报错原因及解决方法
数据库表结构
events表
eventid event_type etc. ---------------------------------------------------- 1 type1 2 type2 3 type1
event_frag_link表(事件-片段关联表)
eid #event_id fid #fragment_id ---------------------------------------------------- 1 asccorn_57c 2 asccorn_58c1 1 asc_mil_34c3
f_and_t表(片段-文本关联表)
fid #fragment tid #text_id ---------------------------------------------------- asccorn_57c asccorn asccorn_58c1 asccorn asc_mil_34c3 asc_mil
texts表
filename #text_id/tid ---------------------------------------------------- asccorn asc_mil ...
业务需求
一个文本包含多个片段,事件与这些片段关联,需查询与指定文本关联的事件。例如搜索asccorn时返回事件1和2,搜索asc_mil时返回事件1等。
报错分析
报错SQL
尝试执行以下SQL时触发错误:
SELECT DISTINCT eventid, event_type, date_display, date_from, date_to, location, done FROM events INNER JOIN event_frag_link ON events.eventid = event_frag_link.eid INNER JOIN f_and_t ON texts.filename = f_and_t.fid WHERE texts.filename LIKE 'asccorn'
报错信息
#1054 - Unknown column 'texts.filename' in 'on clause'
错误原因
查询语句中未引入texts表,但在INNER JOIN f_and_t的关联条件里直接使用了texts.filename字段。MySQL只能识别已经通过JOIN或FROM子句引入的表的字段,因此会抛出"未知列"的错误。
修正后的可行SQL
补充关联texts表,并修正关联逻辑后,SQL可正常运行:
SELECT DISTINCT eventid, event_type, date_display, date_from, date_to, location, done FROM events INNER JOIN event_frag_link ON events.eventid = event_frag_link.eid INNER JOIN f_and_t ON event_frag_link.fid = f_and_t.fid INNER JOIN texts ON f_and_t.tid = texts.filename WHERE texts.filename LIKE 'asccorn'
内容的提问来源于stack exchange,提问作者HBMCS
相关产品推荐
相关产品推荐

