Выбор postgreSQL работает, а удаление - нет - PullRequest
1 голос
/ 25 октября 2010

Я пытаюсь изменить следующий запрос на тот, который удаляет возвращенные строки.

SELECT bad_rows.*
FROM votes as bad_rows
INNER JOIN(
    SELECT  MIN(id) as min_id, votes.object_id, votes.user_id 
FROM votes WHERE is_archived=FALSE AND 
     votes.direction < 20 
GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) AS double_rows ON 
    double_rows.object_id = bad_rows.object_id 
    AND double_rows.user_id=bad_rows.user_id 
    AND bad_rows.is_archived=False
    AND double_rows.min_id <> bad_rows.id

этот выбор работает и дает мне строки, которые я хочу удалить.Теперь, если я изменил выбор на удаление, мой запрос не работает.

DELETE bad_rows.*
FROM votes as bad_rows
INNER JOIN(
    SELECT  MIN(id) as min_id, votes.object_id, votes.user_id 
FROM votes WHERE is_archived=FALSE AND 
     votes.direction < 20 
GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) AS double_rows ON 
    double_rows.object_id = bad_rows.object_id 
    AND double_rows.user_id=bad_rows.user_id 
    AND bad_rows.is_archived=False
    AND double_rows.min_id <> bad_rows.id

ОШИБКА: синтаксическая ошибка в или около "bad_rows" ЛИНИЯ 1: УДАЛИТЬ bad_rows. *

Ответы [ 2 ]

3 голосов
/ 25 октября 2010

Нельзя указать столбцы для удаления (* в bad_rows.*.)

Кроме того, большинство баз данных не позволяют указывать псевдоним для удаления.Поэтому обычный подход к удалению выглядит примерно так:

DELETE  VOTES
WHERE   ID IN
        (
        <subquery selecting the ID's of the rows you want to delete>
        )
0 голосов
/ 25 октября 2010

Используя совет Андомара, я получил его.

DELETE FROM votes WHERE id IN (
SELECT bad_rows.id
FROM votes as bad_rows
INNER JOIN(
SELECT  MIN(id) as min_id, votes.object_id, votes.user_id 
FROM votes where is_archived=FALSE and votes.direction < 20 

GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) as double_rows on double_rows.object_id = bad_rows.object_id and double_rows.user_id=bad_rows.user_id and bad_rows.is_archived=False
    and double_rows.min_id <> bad_rows.id
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...