【问题标题】:delete records from a select query从选择查询中删除记录
【发布时间】:2018-05-18 12:08:22
【问题描述】:

我需要通过计算“命令”列来删除一些用户,如果条目少于 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)

上面的查询不起作用。

【问题讨论】:

    标签: sql postgresql subquery sql-delete


    【解决方案1】:

    IN 运算符要求左侧和右侧的列数相同。您的子查询返回两列,但您只将其与左侧的一列进行比较。您需要从子查询的选择列表中删除 count(command) - 无论如何都不需要。

    另外:用于IN 条件的子查询中的order by 是无用的(除非您应用例如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)
    

    【讨论】:

      【解决方案2】:

      SELECT 中删除count (command)。您的 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 )
      

      【讨论】:

        猜你喜欢
        • 2014-11-21
        • 2019-04-21
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        相关资源
        最近更新 更多