为什么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而不是问题表
- 确保问题列与我们要比较的数据类型相同。