Правильный запрос, ошибка просмотра - PullRequest
0 голосов
/ 17 сентября 2018

У меня возникла проблема с некоторыми DB2 SQL, и я действительно мог бы использовать некоторую помощь.

Короче говоря, люди хотят, чтобы я создал представление. Я написал запрос, который работает и возвращает то, что мы хотели ... но когда я обертываю его оператором CREATE VIEW, представление выдает ошибки, когда я запрашиваю его с чем-либо.

Запрос (имена изменены явно):

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

Я застрял на некоторое время. Я предполагаю, что я создаю неправильное представление. Есть идеи? Советы?

Редактировать: DB2 11.1

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

У вас может быть другая проблема. Я только что попробовал это в 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".

0 голосов
/ 17 сентября 2018

Я бы избавился почти от всех скобок и кавычек. Я подозреваю, что они не нужны, если DB2 не очень нестандартный sql. Я оставил кавычки, хотя я бы тоже убрал их, если они не являются зарезервированными словами.

Нет причин делать что-то вроде from (select * from table)

Запрос должен быть просто:

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 as select * from (...), он должен быть просто:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...