2014-07-18 49 views
0

有一些問題,查詢到我的MySQL數據庫:MySQL錯誤#1052列在FROM子句中曖​​昧

"SELECT event_id, area_name FROM tie_in.events LEFT JOIN tie_in.area USING (area_id)" 

當我跑對我的DB返回錯誤#1052 - Column 'area_id' in from clause is ambiguous此查詢。

我在這個查詢中有其他LEFT JOIN s我剛剛刪除它們的可讀性,他們取得很好。 任何幫助解決這個將不勝感激。

謝謝你們!

+2

嘗試'TABLE_NAME.area_id'(*其中'TABLE_NAME'是當然包含'area_id'列的實際表名*)。 – Darren

+0

即使您的查詢沒有遇到此問題,最佳做法是限定所有列引用與表的名稱或(最好)分配給表的別名(請參閱juergen d的答案)。這種做法可以防止稍後在正在工作的查詢中彈出此錯誤,此時某人將某列添加到您的查詢所使用的表中,該表與您的查詢中已引用的列的名稱相匹配。 – spencer7593

+0

我收到一個語法錯誤每次我分開我的表和列與一段時間不知道我做錯了什麼.. @達倫 – velvetpuma

回答

2

如果多個表中存在具有相同名稱的列,那麼你必須告訴DB採取在它前面加上表名其中之一

SELECT e.event_id, 
     a.area_name 
FROM tie_in.events e 
LEFT JOIN tie_in.area a ON a.area_id = e.area_id 
+0

+1一個巨大的好處遵循這種模式(即限定引用多個表的EVERY查詢中的所有列引用)是,它將防止稍後彈出「不明確的列」錯誤,當有人將列添加到查詢使用的表,列名與查詢中已引用的列的名稱相匹配。 (如果不遵循這種模式,向表中添加一列可能會「破壞」以前工作的SQL語句。)另一個好處是讀者可以更容易地解讀SQL;讀者可能不知道哪些列來自哪個表。 – spencer7593

+0

太棒了,這種方法運行良好,但現在我正在格式化我的查詢這種方式的語法是在我的日期時間請求有點jargled:'DATE_FORMAT(event_time,'%W%M%D at%l:%i%p')作爲event_time'關於如何使這項工作的任何想法? – velvetpuma

+0

nvm,我只是把它錯了。我想到了。謝謝您的幫助! – velvetpuma

0

錯誤基本上意味着與名稱的列可以在查詢中的其他表中找到area_id

你可以用一個前綴別名列名:

"SELECT event_id, area_name FROM tie_in.events LEFT JOIN tie_in.area USING (table.area_id)"

更換table與表名或別名。