为什么DB2不让我在WHERE子句中有列?

时间:2020-03-05 18:58:34  来源:igfitidea点击:

我有一个通过ODBC访问的远程DB2数据库。当我有这样的查询时

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-clause中,就可以触发问题。

解决方案

回答

很抱歉获得明显的答案,但是问题表存在吗?由于表/列的名称,代码看起来像伪代码,但请务必仔细检查拼写。这不是一个可能由不同数据库/服务器之间的联接表组成的视图吗?

回答

我们正在使用的实际SQL是什么?我认为我们提出的示例没有任何问题。尝试查找可能引起错误的逗号和/或者引号放错地方。

回答

它仅适用于:

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

回答

请运行下一条SQL语句。对我来说,它工作正常。如果仍然有这个奇怪的错误,那将是一个DB2错误。将代码从UNIX编辑器复制到Windows以及反之亦然时,我遇到了一些问题。尽管看起来不错,但SQL无法运行。重新输入该语句可以解决我的问题。

创建表问题表(
foo varchar(10),
bar int,
问题列varchar(10)
);

选择t.foo,t.bar,t.problemcolumn
从问题表
t.bar <60;

选择t.foo,t.bar,t.problemcolumn
从问题表
在哪里t.problemcolumn ='x'
AND t.bar <60;

回答

它认为它应该在DB2中工作。
字体输入软件是什么?

回答

DB2有时会产生误导性错误。我们可以尝试以下故障排除步骤:

  • 尝试通过DBArtisan或者DB2 Control Center执行代码,看看是否得到正确的结果/错误消息。
  • 尝试使用schema_name.problemtable而不是问题表
  • 确保问题列与我们要比较的数据类型相同。