이 select 문이 있습니다.
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
이 성명서에서 가져온 행을 삭제하고 싶습니다. 아이디어가 있습니까?
Delete FROM은 ORA-01732: data manipulation operation not legal on this view
동일한 테이블이지만 두 테이블을 비교하고 있기 때문에 오류가 발생합니다.
또한 행 이 있는 tablename 에서 삭제를 시도했지만 원하는 것보다 훨씬 많은 행을 삭제했습니다.
"중복"은 Subcont를 기반으로합니다. 빈을 의미하는 subcont 필드를 사용하여 데이터베이스 / 응용 프로그램에 삽입 된 레코드가 있었으므로 이제 하나를 제외하고 동일한 레코드가 있습니다. 예를 들어 A가 subcont에 있고 다른 레코드가 비어 있습니다.
idcprefix, subcont, orgdept and idcseq
1 A ABC 1
1 ABC 1
2 A BCD 1
2 BCD 1
쿼리는 그렇지 않은 레코드와 중복되는 하위 연속이있는 모든 레코드를 표시하며 하위 연속 값이있는 레코드를 제거해야합니다.
도움을 주시면 감사하겠습니다!
(idcprefix, subcont, orgdept, idcseq)가 고유하다고 가정하면 아래는 어떻습니까?
DELETE FROM DCS_IDC
WHERE (idcprefix, subcont, orgdept, idcseq) IN (
WITH del AS (
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
)
SELECT idcprefix, subcont, orgdept, idcseq FROM del
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다