我需要通过计算列"命令"来删除一些用户,如果少于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)
以上查询无效。
答案 0 :(得分:1)
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)
答案 1 :(得分:0)
从count (command)
移除SELECT
。您的SELECT
正在选择2列,而只有1列应传递给IN
运算符,
同时删除order by
。当你必须删除某些内容时,它毫无意义。
DELETE FROM public."Users"
where telegram_nickname in (select telegram_nickname
from public."Logs"
group by telegram_nickname
having count (command) > 5 )