sql - 更新比我预期的更多的行

用户8957934

我正在尝试更新我的表的一部分。如果我执行 select 语句,我会发现 17 次出现,但是当我更新它时,它会更新 997 次出现。我只想更新 17 次。这是我的代码:

update proc_try k set detail = (
select jobs from 
       (
with
      a ( nameHost ) as (
           select b.nameHost
        from     definition a ,schema.nodes b
        where b.nameHost = a.idNode or b.nodeid=a.idNode 
        and nodetype not like 'R'
        group by b.nameHost
        having   sum(1 + lengthb(nameJob)) - 1 > 4000
      )      
      select   nameHost, 'TOOLONG' as jobs
      from  a  
      UNION ALL 
      select p.nameHost, listagg(p.nameJob,',') within group (order by p.nameJob) as jobs
        from 
                ( 
                select distinct b.nameJob, a.nameHost
                from definition b
                right join schema.nodes a
                on b.idNode in (a.nodeid,a.nameHost) and
                b.application not like '@NOTINCLUDE'
                where a.nameHost not in (select * from a) and nodetype not like 'R'
                --b.application not like '@NOTINCLUDE'
       ) p 
        group by p.nameHost) random 
         where k.nameHost=random.nameHost);

请问你能帮帮我吗?

威廉·罗伯逊

您通常可以将复杂的update转换为merge

merge into proc_try k
using
   ( select jobs
     from   ( with a(namehost) as
                   ( select b.namehost
                     from   definition   a
                            join schema.nodes b
                                 on  b.namehost = a.idnode
                                 or  (b.nodeid = a.idnode and nodetype <> 'R')
                     group  by b.namehost
                     having sum(1 + lengthb(namejob)) - 1 > 4000 )
              select namehost
                   , 'TOOLONG' as jobs
              from   a
              union all
              select p.namehost
                   , listagg(p.namejob, ',') within group(order by p.namejob) as jobs
              from   ( select distinct
                              b.namejob, a.namehost
                       from   schema.nodes a
                              left join definition b
                                   on  b.idnode in (a.nodeid, a.namehost)
                                   and b.application not like '@NOTINCLUDE'
                       where  a.namehost not in (select * from a)
                       and    nodetype not like 'R'
                     ) p
              group  by p.namehost
            ) random
   ) new_jobs
on (k.namehost = new_jobs.namehost)
when matched then update set k.detail = new_jobs.jobs;

这是未经测试的,因为我没有您的表格或示例数据。

编辑:看起来我们可以简化一下,这样:

merge into proc_try k
using
   ( with overlength (namehost) as
          ( select n.namehost
            from   definition d
                   join schema.nodes n
                        on  n.namehost = d.idnode
                        or  (n.nodeid = d.idnode and nodetype <> 'R')
            group by n.namehost
            having sum(1 + lengthb(n.namejob)) - 1 > 4000 )
     select o.namehost, 'TOOLONG' as jobs
     from   overlength o
     union all
     select sd.namehost
          , listagg(sd.namejob, ',') within group(order by sd.namejob) as jobs
     from   ( select distinct d.namejob, n.namehost
              from   schema.nodes n
                     left join definition d
                          on  d.idnode in (n.nodeid, n.namehost)
                          and d.application not like '@NOTINCLUDE'
              where  n.namehost not in (select o.namehost from overlength o)
              and    n.nodetype not like 'R'
            ) sd
     group  by sd.namehost
   ) new_jobs
on (new_jobs.namehost = k.namehost)
when matched then update set k.detail = new_jobs.jobs;

我仍然看不到什么

sum(1 + lengthb(namejob)) - 1

是为了做,虽然。看起来可以简化为

sum(lengthb(namejob))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server - 当我加入的表的行比我正在更新的表多得多时,根据内部联接使用 CASE 更新列

来自分类Dev

比我目前使用的更好的获取SQL数据的方法

来自分类Dev

XSLT解析了比我选择的更多的数据

来自分类Dev

SQL:NOT IN 不返回预期的行

来自分类Dev

Swift项目比我预期的要大

来自分类Dev

程序提供比我预期的输出不同

来自分类Dev

加入sql server给我更多行

来自分类Dev

更新SQL表的行

来自分类Dev

选定行的SQL更新

来自分类Dev

当我运行更新命令时,SQL创建新行

来自分类Dev

如果我尝试使用比我更多的内核会怎样?

来自分类Dev

我的PHP Session变量传递的比我的变量更多

来自分类Dev

我真的有比我想象的更多的内存吗?

来自分类Dev

我对SQL COUNT的使用未按预期工作

来自分类Dev

我对SQL COUNT的使用未按预期工作

来自分类Dev

C:免费释放比我想要的更多的东西

来自分类Dev

为什么`ls -l`比我计数更多的文件?

来自分类Dev

C:免费释放比我想要的更多的东西

来自分类Dev

正则表达式比我想要的更多

来自分类Dev

阻止MS Word选择比我想要的更多的东西

来自分类Dev

使用LinkedList的输出比我预期的输出奇怪

来自分类Dev

析构函数调用的时间比我预期的多

来自分类Dev

PHPform不更新SQL行

来自分类Dev

需要帮助为我的sql语句添加更多功能

来自分类Dev

我如何乘以SQL行

来自分类Dev

SQL查询返回更多

来自分类Dev

SQL UPDATE如何比类似的SELECT匹配更多的行?

来自分类Dev

dplyr通用SQL中的500个结果行更多

来自分类Dev

SQL更新触发期间的预期结果表是什么?