2011-08-25 16 views
0

我最近更換了服務器,儘管我仍然明顯使用MySQL,但我不認爲它是相同版本或以與我相同的方式設置習慣於。mysql內部連接ambigious USING()字段,但並不總是

最顯着的影響是我的JOIN查詢,實質上一些使用INNER JOIN的查詢在我的最後一個服務器上拋出ambigious列錯誤,我確信代碼會好的。

table1 
t1_id int primary key 
name text 

map 
t1_id int 
t2_id int 

table2 
t2_id int primary key 
name text 

table1與table2有一對多的關係。 通常情況下,爲了從表1和表2的所有條目的行,我會做這樣的事情:

SELECT * FROM table1 
INNER JOIN map USING(t1_id) 
INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1; 

然而,這將引發每次ambigious列錯誤。這一輪的唯一方法就是使用

SELECT * FROM table1 
INNER JOIN map ON(table1.t1_id=map.t1_id) 
INNER JOIN table2 ON(map.t2_id=table2.t2_id) 
WHERE table1.t1_id=1; 

沒有太多我可以告訴你服務器的配置除了版本,56年5月1日 - 社區登錄,我相信這正在運行的Linux(Debian的可能)。

這是我的查詢問題還是與我們使用的MySQL版本有關?

回答

0

你有沒有試過如下:

SELECT table1.t1_id, table1.name FROM table1 
INNER JOIN map USING(t1_id) 
INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1; 
+0

嘗試這樣做,有用。我最初的查詢直到最近才被破解......我將它標記爲已接受,因爲雖然這並未實際解決任何問題,但我無法重現我之前看到的錯誤,因此無論是出現人爲錯誤還是某人不見了並在解決此問題時修復了服務器。無論如何,儘管我應該指出,只從兩個表中獲取數據並不是很有用 – jammypeach

0

您可以得到任何coulmn您從任何表格,只是別名想那些具有相同的名稱(臨時命名):

SELECT table1.t1_id 
    , table1.name AS t1_name 
    , table2.t2_id 
    , table2.name AS t2_name 
FROM table1 
    INNER JOIN map USING(t1_id) 
    INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1;