Если вы проверите эту страницу , вы заметите, что при использовании 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)
);
как указано в ответ Д-Шиша .
Вот демоверсия , чтобы увидеть два разных набора результатов из этих двух запросов.