2008-09-17 50 views
1

我有一個通過ODBC訪問的遠程DB2數據庫。當我有這樣爲什麼DB2不讓我在WHERE子句中有一列?

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.bar < 60; 

它就像一個魅力的查詢,所以表和列明顯存在。

但是,如果我在WHERE子句

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.problemcolumn = 'x' 
AND t.bar < 60; 

在指定問題列它給了我一個錯誤

Table "problemtable" does not exist. 

怎麼可能是這個原因?我已經仔細檢查了拼寫,並且我可以通過在where子句中包含問題列來觸發問題。

+0

請發佈實際的SQL - 您的消毒版本可能會刪除錯誤。 – paxdiablo 2008-09-17 11:47:59

回答

3

對不起,明顯的答案,但問題表存在嗎?由於表格/列名稱,您的代碼看起來像僞代碼,但一定要仔細檢查拼寫。這不是一個甚至可能包含跨不同數據庫/服務器的連接表的視圖?

+0

是的,第一個查詢有效,所有表和列都存在,並且我具有讀取它們的所有必要權限。我編輯了這些問題,試圖使這個更清楚。 – Rowan 2008-09-17 11:42:50

2

你使用的是什麼實際的SQL?我看不出你所舉的例子有什麼問題。嘗試尋找錯誤的逗號和/或可能引發錯誤的引號。

0

是否與剛工作:

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.problemcolumn = 'x' 
0

請運行下一個SQL語句。對我來說,它工作正常。如果你仍然有這個奇怪的錯誤,那將是一個DB2錯誤。在將UNIX編輯器的代碼複製到Windows中時,我遇到了一些問題,反之亦然。 SQL不會運行,雖然它看起來不錯。重新調整聲明解決了我的問題。

創建表problemtable( FOO VARCHAR(10), 酒吧INT, problemcolumn VARCHAR(10) );

SELECT t.foo,t.bar,t.problemcolumn FROM problemtable t WHERE t.bar < 60;

SELECT t.foo,t.bar,t.problemcolumn FROM problemtable噸 WHERE t.problemcolumn = 'X' AND t.bar < 60;

0

它認爲它應該在DB2中工作。 什麼是你的字體軟件?

0

DB2有時會產生誤導性的錯誤。你可以嘗試以下故障排除步驟:

  1. 試圖通過 DBArtisan中或DB2控制中心和 執行代碼看,如果你得到正確的結果/錯誤 消息。
  2. 嘗試使用schema_name.problemtable ,而不是僅僅problemtable
  3. 確保problemcolumn是 你是 它比較相同的數據類型。
相關問題