0

私はこの選択ステートメントを持っています:

SELECT d.idcprefix,
         d.orgdept,
         d.idcseq,
         d.subcont, 
         d.actualcomp, 
         COUNT (*) AS "No Duplicates"
    FROM DCS_IDC, DCS_IDC z
   WHERE     D.IDCPREFIX = z.idcprefix
         AND z.orgdept = d.orgdept
         AND z.idcseq = d.idcseq
         and D.SUBCONT is not null
  HAVING COUNT (*) > 1
GROUP BY d.idcprefix,
         d.orgdept,
         d.idcseq,
         d.subcont,
         d.actualcomp
ORDER BY d.idcprefix,
         d.orgdept,
         d.idcseq,
         d.subcont,
         d.actualcomp

このステートメントから戻された行を削除したいのですが、アイデアはありますか?

ORA-01732: data manipulation operation not legal on this view同じテーブルであるにもかかわらず、2 つのテーブルを比較していると思われるため、Delete FROM でエラーが発生します。

が存在するテーブル名からの削除も試みましたが、必要以上の行が削除されました。

「重複」は Subcont に基づいています。subcont フィールドを使用してデータベース/アプリケーションに挿入されたレコードがありましたが、これは空白であることが意図されていました。たとえば、サブコンに A があり、もう一方は空白であることを除いて同じレコードがあります。

idcprefix, subcont, orgdept and idcseq
1          A        ABC         1
1                   ABC         1
2          A        BCD         1
2                   BCD         1

クエリは、そうでないものの重複であるサブコンを持つすべてのレコードを表示し、サブコン値を持つレコードを削除する必要があります。

助けていただければ幸いです。

4

2 に答える 2

0

どうですか:

BEGIN
  FOR aRow IN (SELECT d.idcprefix,
                      d.orgdept,
                      d.idcseq,
                      COUNT(*) AS DUP_COUNT
                 FROM DCS_IDC d
                 HAVING COUNT(*) > 1
                 GROUP BY d.idcprefix,
                          d.orgdept,
                          d.idcseq)
  LOOP
    DELETE FROM DCS_IDC
      WHERE IDCPREFIX = aRow.IDCPREFIX AND
            ORGDEPT = aRow.ORGDEPT AND
            IDCSEQ = aRow.IDCSEQ AND
            SUBCONT IS NOT NULL;
  END LOOP;
END;

保証はありません。自己責任。動物実験は行っていません - あなたが一番です!

共有してお楽しみください。

于 2013-07-24T12:10:31.820 に答える