Sql 有效查询,查看失败
我遇到了一些DB2SQL问题,需要一些帮助 简而言之,人们希望我创建一个视图。我写了一个有效的查询并返回我们想要的。。。但是当我用“createview”语句包装它时,当我用任何东西查询它时,视图会抛出错误 查询名称已明显更改:Sql 有效查询,查看失败,sql,view,db2,Sql,View,Db2,我遇到了一些DB2SQL问题,需要一些帮助 简而言之,人们希望我创建一个视图。我写了一个有效的查询并返回我们想要的。。。但是当我用“createview”语句包装它时,当我用任何东西查询它时,视图会抛出错误 查询名称已明显更改: SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link" FROM (( SELECT * FROM db.schema.VT
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM ((
SELECT * FROM db.schema.VTable)
"QTable" LEFT OUTER JOIN (SELECT * FROM db.schema.ETable)
"QStat" on "QTable"."Status" = "QStat"."ETable")
每运行一次,我都会得到10张唱片。太棒了,这就是我想要的。当我将其包装为视图时,我通过输入:
CREATE VIEW TestSchema.TestTable AS
SELECT * FROM ( *query I just wrote above*)
它运行得非常快,但是我运行了一个基本的SELECT*FROM viewname,我总是会得到相同的错误:
SQL0206N "QTable.Status" is not valid in the context where it is used. SQLSTATE=42703
我已经被困了一段时间了。我假设我创建的视图是错误的。有什么想法吗?小费
编辑:DB211.1我将去掉几乎所有的方括号和引号。我怀疑它们不是必需的,除非DB2是非常非标准的sql。我留下了引号,尽管我也会把所有的引号都去掉,除非它们是保留字 没有理由执行类似于从表中选择*的操作 查询应该是:
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
create view myView as
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
您的视图也不应被创建为“选择*自…”。。。应该是:
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
create view myView as
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
我会去掉所有括号和引号。我怀疑它们不是必需的,除非DB2是非常非标准的sql。我留下了引号,尽管我也会把所有的引号都去掉,除非它们是保留字 没有理由执行类似于从表中选择*的操作 查询应该是:
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
create view myView as
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
您的视图也不应被创建为“选择*自…”。。。应该是:
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
create view myView as
SELECT DISTINCT "QTable"."Add" "Q_Add", "QTable"."Approved" "Q_Approved", "QTable"."Link" "Q_Link"
FROM db.schema.VTable QTable
LEFT OUTER JOIN db.schema.ETable "QStat" on "QTable"."Status" = "QStat"."ETable"
你可能有不同的问题。我刚刚在DB2 10.5中试用过,效果很好:
create table vtable (
"Add" int,
"Approved" int,
"Link" varchar(20),
"Status" int
);
create table etable (
"ETable" int
);
create view my_view1 as
select
*
from
(
SELECT
DISTINCT "QTable"."Add" "Q_Add",
"QTable"."Approved" "Q_Approved",
"QTable"."Link" "Q_Link"
FROM
(
( SELECT * FROM VTable) "QTable"
LEFT OUTER JOIN
(
SELECT
*
FROM ETable
)
"QStat" on "QTable"."Status" = "QStat"."ETable"
)
)
无论如何,你的括号太多了。去掉那些你不需要的
而QTable需要始终使用双引号,就像在QTable中一样。您可能会遇到不同的问题。我刚刚在DB2 10.5中试用过,效果很好:
create table vtable (
"Add" int,
"Approved" int,
"Link" varchar(20),
"Status" int
);
create table etable (
"ETable" int
);
create view my_view1 as
select
*
from
(
SELECT
DISTINCT "QTable"."Add" "Q_Add",
"QTable"."Approved" "Q_Approved",
"QTable"."Link" "Q_Link"
FROM
(
( SELECT * FROM VTable) "QTable"
LEFT OUTER JOIN
(
SELECT
*
FROM ETable
)
"QStat" on "QTable"."Status" = "QStat"."ETable"
)
)
无论如何,你的括号太多了。去掉那些你不需要的
QTable需要始终用双引号括起来,就像在QTable中一样。什么版本的DB2?DB2 11.1在描述中添加了它。确保QTable始终用双引号括起来,就像在QTable中一样。请看我的回答。我被迫更改查询,这样它就可以工作了。你错过了一个案例。哦,对不起,这是在我的SQL中引用的。QTable位于左外部联接之前的右侧。当我运行Tomc的代码而不是我的或你的代码时,我不知道为什么它会起作用。是什么版本的DB2?DB2 11.1,在描述中添加了它。确保QTable总是在双引号之间写入,就像QTable一样。请看我的回答。我被迫更改查询,这样它就可以工作了。你错过了一个案例。哦,对不起,这是在我的SQL中引用的。QTable位于左外部联接之前的右侧。我不知道当我运行Tomc的代码而不是我的或你的代码时,它为什么会起作用。是的,DB2大部分时间都使用标准SQL语法,因此查询将从您所展示的简化中受益匪浅。向上投票。好的,我试试看。另外,我试着做了你提到的第二个技巧,并删除了SELECT*FROM。。。它似乎是多余的,但没有修复任何东西。所以它起作用了。。。但我不能完全确定原因。另外,我为这段非常难看的代码道歉。我不是SQL的高手,我的SQL的很多内容都来自一个帮助我为表生成SQL的程序。这也很可怕。。因为我有23个表要做这些更改,有些是500行。无论如何,非常感谢您,如果您能想到原因,为什么要更改和简化它?是的,DB2大部分时间都使用标准SQL语法,因此查询将从您展示的简化中受益匪浅。向上投票。好的,我试试看。另外,我试着做了你提到的第二个技巧,并删除了SELECT*FROM。。。它似乎是多余的,但没有修复任何东西。所以它起作用了。。。但我不能完全确定原因。另外,我为这段非常难看的代码道歉。我不是SQL的高手,我的SQL的很多内容都来自一个帮助我为表生成SQL的程序。这也很可怕。。因为我有23个表要做这些更改,有些是500行。不管怎样,非常感谢你,如果你能想到原因,为什么要改变和简化它?