2008-09-17 35 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是 你是 它比较相同的数据类型。
相关问题