从选择查询中删除记录

时间:2018-05-18 12:08:23

标签: sql postgresql subquery sql-delete

我需要通过计算列"命令"来删除一些用户,如果少于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 :(得分: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 )