我要删除重复项。但是在Oracle Sql开发人员中,当我将以下内容与CTE一起使用时,它显示了错误。如果我使用“选择”,则只能使用它,但是我想使用视图从表中删除。
WITH PECCTE AS (
SELECT QT_PEC_RATE.*, ROW_NUMBER() OVER(PARTITION BY QT_PEC_RATE.UWC_CODE, AGE ORDER BY QT_PEC_RATE.UWC_CODE) AS ROWNUMBER
FROM QT_PEC_RATE WHERE NLG_OPTION='STD' AND GENDER='M' AND CNTRY_RATING='C' AND GMCR_RATE=2
)
DELETE FROM PECCTE WHERE ROWNUMBER>1;
它显示缺少选择语句的错误。 它仅适用于以下
WITH PECCTE AS (
SELECT QT_PEC_RATE.*, ROW_NUMBER() OVER(PARTITION BY QT_PEC_RATE.UWC_CODE, AGE ORDER BY QT_PEC_RATE.UWC_CODE) AS ROWNUMBER
FROM QT_PEC_RATE WHERE NLG_OPTION='STD' AND GENDER='M' AND CNTRY_RATING='C' AND GMCR_RATE=2
)
SELECT * FROM PECCTE;
如何使用此视图从表中删除。
答案 0 :(得分:1)
假设表中有唯一的P_ID:
DELETE FROM QT_PEC_RATE
WHERE P_ID in (
WITH PECCTE AS (
SELECT ID, ROW_NUMBER() OVER(PARTITION BY UWC_CODE, AGE ORDER BY UWC_CODE) ROWNUMBER
FROM QT_PEC_RATE
WHERE NLG_OPTION='STD'
AND GENDER='M'
AND CNTRY_RATING='C'
AND GMCR_RATE=2
)
SELECT P_ID
FROM PECCTE
WHERE ROWNUMBER > 1
)
答案 1 :(得分:0)
它不起作用(如您所见)。看看是否可以将其重写为
delete from peccte
where some_id in (select id
from (select qtpec_rate.*, row_number()... as rownumber --> this is your CTE
from qt_pec_rate
where ...
)
where rownumber > 1
);