Удалить результаты в подзапросе - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы удалить результаты подзапроса ниже. Как я могу это сделать?

delete
from mytable
where rowid in (select rowid, count(*) as count from mytable group by mygroup having count > 50)

Не работает:

[1] [SQLITE_ERROR] Ошибка SQL или отсутствует база данных (дополнительный выбор возвращает 8 столбцы - ожидается 1)

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Полагаю, вы, возможно, захотите сделать это, когда используете агрегатную функцию, вам нужно добавить неагрегированный столбец в group by

delete
from mytable
where mygroup in (select mygroup from mytable group by mygroup having count(*) > 50)
0 голосов
/ 07 сентября 2018

Если вы проверите эту страницу , вы заметите, что при использовании IN и подзапросе:

Список значений - это список фиксированных значений или результирующий набор из один столбец , возвращаемый подзапросом. Возвращаемый тип выражения и значения в списке должны быть одинаковыми.

Ваша ошибка здесь в том, что ваш подзапрос возвращает более 1 столбца (rowid и count).

Чтобы исправить это, попробуйте следующее:

delete
from  mytable
where rowid in (select rowid 
                from (select rowid, 
                             count(*) as count 
                      from mytable 
                      group by mygroup 
                      having count > 50)
                )

Обратите внимание, что, при условии, что вы хотите удалить все результаты, имеющие счетчик mygroup> 50 , этот запрос не выполнит всю работу. Он просто вернет один ряд из этой группы. Вы должны попробовать это:

select * FROM mytable
where mygroup in (select mygroup 
                  from (select mygroup,
                               count(*) as count
                        from mytable
                        group by mygroup
                        having count > 1)
                  );

как указано в ответ Д-Шиша .

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

0 голосов
/ 07 сентября 2018
delete
from mytable
where rowid in (select rowid from (select rowid, count(*) as count from mytable group by mygroup having count > 50))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...