удалить записи из запроса выбора - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно удалить некоторых пользователей, посчитав в столбце «команда», если количество записей меньше 5, их следует удалить из таблицы «Пользователи».

DELETE FROM public."Users" 
where telegram_nickname in (select telegram_nickname, 
                                   count (command) 
                            from public."Logs" 
                            group by telegram_nickname 
                            having count (command) > 5 
                            order by (count) desc)

Приведенный выше запрос не делает 'т работа.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Оператор IN требует, чтобы у вас было одинаковое количество столбцов с левой и правой сторон.Ваш подзапрос возвращает два столбца, но вы сравниваете его только с одним столбцом слева.Вам нужно удалить count(command) из списка выбора подзапроса - он все равно не нужен.

Также: order by в подзапросе, используемом для условия IN, бесполезен (если вы не примените, например, предложение distinct on () или limit)

Итак, вынужно использовать:

DELETE FROM public."Users" 
where telegram_nickname in (select telegram_nickname
                            from public."Logs" 
                            group by telegram_nickname 
                            having count (command) > 5)
0 голосов
/ 18 мая 2018

Удалить count (command) из SELECT.Ваш SELECT выбирает 2 столбца, тогда как оператору IN необходимо передать только 1 столбец,

Удалить также order by.Это бессмысленно, когда вам нужно что-то удалить.

DELETE FROM public."Users" 
where telegram_nickname in (select telegram_nickname
                            from public."Logs" 
                            group by telegram_nickname 
                            having count (command) > 5 )
...