Вставка DB2 v8 с CTE - PullRequest
       9

Вставка DB2 v8 с CTE

0 голосов
/ 10 сентября 2010

Мне нужно выбрать CTE (общее табличное выражение) в DB2 v8 и вставить результат в таблицу.С первого взгляда соответствующую документацию для v8 трудно понять, но для v9 есть четкий пример (http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.apsg/db2z_createcte.htm):

INSERT INTO vital_mgr (mgrno)
WITH VITALDEPT (deptno, se_count)  AS
(
     SELECT deptno, count(*)
     FROM DSN8910.EMP
     WHERE job = 'senior engineer'
     GROUP BY deptno
)
SELECT    d.manager
FROM      DSN8910.DEPT d
         , VITALDEPT s
WHERE     d.deptno = s.deptno
          AND s.se_count  >  (
               SELECT  AVG(se_count)
               FROM    VITALDEPT
          );

Хотя в v8 это не работает. Как это следует записать в v8?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Здесь есть простой обходной путь здесь , который позволяет вам использовать INSERT или UPDATE, используя обычный оператор WITH.Этот хак будет работать для INSERT на V8 или выше, и для UPDATE на V9 или выше.

Существуют и другие методы для V8 и выше, обычно с использованием подвыборов, но я считаю их непрактичными из-за их сложности.

0 голосов
/ 11 февраля 2011

Напиши как босс

INSERT INTO vital_mgr 
(
    SELECT d.manager
    FROM SN8910.DEPT AS d
        INNER JOIN 
            (
                SELECT deptno, count(*)
                FROM DSN8910.EMP
                WHERE job = 'senior engineer'
                GROUP BY deptno
            ) AS s (deptno, se_count)
                ON d.deptno = s.deptno
    WHERE s.se_count > (
                            SELECT AVG(se_count)
                            FROM
                                (
                                    SELECT deptno, count(*)
                                    FROM DSN8910.EMP
                                    WHERE job = 'senior engineer'
                                    GROUP BY deptno
                                ) AS VITALDEPT (deptno, se_count)
                       )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...