2008-12-03 34 views
3

我JOIN 2個表MySQL的: 「在where子句是曖昧列 'column_name'」

例如

 
table_A 
+---------+-----------+-----------+ 
| user_id | ticket_id | user_name | 
+---------+-----------+-----------+ 

table_B 
+-----------+-------------+ 
| ticket_id | ticket_name | 
+-----------+-------------+ 

如果我運行下面的查詢:

 
SELECT 
    table_A.user_id 
, table_A.user_name 
, table_B.ticket_name 
FROM table_A 
LEFT JOIN table_B ON table_B.ticket_id = table_A.ticket_id 
WHERE ticket_id = '1'; 

在現場服務器,我們得到錯誤:「Column 'ticket_id' in where clause is ambiguous
在測試服務器上查詢被接受。

我知道如何解決錯誤,這不是問題。

但是,如果我們的測試服務器不接受這個查詢並且(就像生產服務器)拋出一個錯誤那麼我會很高興。

有沒有人知道是否有某種設置會使測試服務器像現場服務器一樣引發錯誤?

P.S.
MySQL版本測試服務器上:Live服務器5.0.32-Debian_7etch5-log
MySQL版本:5.0.41-community-log

回答

5

有與MS SQLServer的一個類似的問題,其中2000版正在接受一些不明確的查詢和2005年將拋出一個錯誤。基本上新版本似乎更嚴格。

作爲一般規則,您應該在測試服務器和生產服務器上使用相同的數據庫版本,以避免在測試機器上運行一段代碼並且生產失敗時出現這種類型的行爲。

+0

是的我知道,我應該保持他們一樣:( – Jacco 2008-12-03 13:27:49

+0

檢查由Tomalak答案,也許你將能夠在兩個版本上設置等效的SQL模式 – kristof 2008-12-03 14:26:40

2

什麼SQL mode是你的兩臺服務器?我可以想象一個人會比另一個人更嚴格。

0

我認爲Tomalak是正確的 - 在MySQL管理設置中有一個嚴格的模式,可以解決您在這個問題上的問題。

我記得你在數據庫創建時選擇它,但你可以從管理GUI中調整它。

有MySQL的一些顯著錯誤,現在,你可能要考慮,如果你能移動到SQL Server Express ...

太陽陷入財務困境,我不surehow MySQL將結束。