Tôi đang sử dụng PostgreSQL 9.1 và tôi muốn xóa các bản sao từ bàn của tôi sử dụng mẹo này: https://stackoverflow.com/a/3822833/2239537PostgreSQL với-delete "mối quan hệ không tồn tại"
Vì vậy, câu hỏi của tôi trông như thế:
WITH cte
AS (SELECT ROW_NUMBER()
OVER (PARTITION BY code, card_id, parent_id
ORDER BY id DESC) RN
FROM card)
DELETE FROM cte
WHERE RN > 1
Nhưng nó cho thấy tôi
ERROR: relation "cte" does not exist
SQL state: 42P01
Character: 157
Tuy nhiên tuyên bố này hoạt động tốt:
WITH cte
AS (SELECT ROW_NUMBER()
OVER (PARTITION BY code, card_id, parent_id
ORDER BY id DESC) RN
FROM merchantcard)
SELECT * FROM cte
WHERE RN > 1
Bất kỳ ý tưởng nào làm cho nó hoạt động? Cảm ơn!
Wow, nhờ trả lời nhanh chóng và câu trả lời hữu ích! Làm việc cho tôi, chỉ phải thêm "xóa thẻ TỪ", nhưng tất nhiên đây chỉ là lỗi đánh máy. –
@AlexKartishev vâng, cảm ơn, cập nhật –
Giải pháp đầu tiên xuất hiện để xóa tất cả các hàng trong bảng cho tôi. Tôi không hiểu hành vi cte: nếu tôi thực hiện 'select count (1) từ cte nơi rn> 1' tôi nhận được số đúng, nhưng' select count (1) từ thẻ có id trong (select id from cte where rn> 1) 'trả về tất cả các hàng –