SQL-запрос без UNION - PullRequest
       4

SQL-запрос без UNION

0 голосов
/ 18 сентября 2009

Может ли кто-нибудь помочь мне переписать следующий запрос без использования оператора UNION?

(
  SELECT
    A.QRYNAME0 "Query Name",
    A.OPRID,
    A.DESCR,
    A.QRYTYPE,
    TO_CHAR(A.CREATEDTTM,'DD-MON-YYYY HH24:MI:SS') "Created On",
    TO_CHAR(A.LASTUPDDTTM,'DD-MON-YYYY HH24:MI:SS') "Last Updated On",
    B.EXECCOUNT "No of Times Executed",
    B.AVGEXECTIME,
    TO_CHAR(B.LASTEXECDTTM,'DD-MON-YYYY HH24:MI:SS') "Last Executed On"
    --TO_CHAR(SUBSTR(A.DESCRLONG,1,50))"Long Description"
  FROM
    PSQRYDEFN A,
    PSQRYSTATS B
  WHERE
    A.QRYNAME = B.QRYNAME and
    a.oprid = b.oprid
)
UNION
(
  SELECT
    A.QRYNAME "Query Name",
    A.OPRID,
    A.DESCR,
    A.QRYTYPE,
    TO_CHAR(A.CREATEDTTM,'DD-MON-YYYY HH24:MI:SS') "Created On",
    TO_CHAR(A.LASTUPDDTTM,'DD-MON-YYYY HH24:MI:SS') "Last Updated On",
    0 "No of Times Executed",
    0,
    NULL "Last Executed On"
    --TO_CHAR(SUBSTR(A.DESCRLONG,1,50)) "Long Description"
  FROM
    PSQRYDEFN A
  WHERE 
    NOT EXISTS (
      SELECT 1 
      FROM   PSQRYSTATS B
      WHERE  a.qryname = b.qryname and a.oprid = b.oprid
    )
)

Ответы [ 3 ]

1 голос
/ 18 сентября 2009

Похоже, вы моделируете левое внешнее соединение. Попробуйте

A.QRYNAME *= B.QRYNAME and
a.oprid *= b.oprid

или даже лучше, сделайте его совместимым с ANSI

FROM PSQRYDEFN A
LEFT OUTER JOIN PSQRYSTATS B ON A.QRYNAME=B.QRYNAME AND A.oprid=B.oprid
0 голосов
/ 18 сентября 2009

Похоже, вам понадобится СЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ двух таблиц, плюс вам нужно будет манипулировать значениями EXECCOUNT и EXECAVGTIME с помощью NVL для преобразования нулей в нули.

0 голосов
/ 18 сентября 2009

Я думаю, что вы ищете функции внешнего левого соединения и isnull / nvl, но без знания диалекта SQL и таблицы не могут быть точными

SELECT
    A.QRYNAME0 "Query Name",
    A.OPRID,
    A.DESCR,
    A.QRYTYPE,
    TO_CHAR(A.CREATEDTTM,'DD-MON-YYYY HH24:MI:SS') "Created On",
    TO_CHAR(A.LASTUPDDTTM,'DD-MON-YYYY HH24:MI:SS') "Last Updated On",
    nvl( B.EXECCOUNT, 0 ) "No of Times Executed",
    nvl( B.AVGEXECTIME, 0)
    nvl( TO_CHAR(B.LASTEXECDTTM,'DD-MON-YYYY HH24:MI:SS'), null) "Last Executed On"
    --TO_CHAR(SUBSTR(A.DESCRLONG,1,50))"Long Description"
FROM
    PSQRYDEFN A left outer join   PSQRYSTATS B
     on A.QRYNAME = B.QRYNAME and
         a.oprid = b.oprid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...