• CTE+操作性语句(删除无主键的相同的多行数据)+CTE操作技巧


    删除一个无主键的多行的数据,首先我们不能保证它的唯一性,这是一个比较麻烦的地方。

    首先我想到了使用RowNumber的方式来,然后想到了CTE,CTE他本身就是一视图,操作起来更能节省资源

    CTE以前只是用到他本身的查询语句

    今天遇到一个问题

    看表

    create table deleteSomeTable
    (
     [name] varchar(20),
     [va]  varchar(20)
     )
     ;
     insert Into deleteSomeTable values('na','va')
     insert Into deleteSomeTable values('na','va')
     insert Into deleteSomeTable values('na2','va')
     insert Into deleteSomeTable values('na1','va')
     insert Into deleteSomeTable values('na1','va')

    name                 va
    -------------------- --------------------
    na                   va
    na                   va
    na                   va
    na2                  va
    na1                  va
    na1                  va

    我如何删除这种没有唯一标示的行呢?使用临时表进行存储,删除完成了再进行修改回来。。。。

    效率太低。

    看看CTE一句就解决问题了

    ;with t as
    (
     select * ,row_number() over(partition by name,va order by name,va) as [num]
     from deleteSomeTable
    )
    delete from t where [num]<>1

    从这里我想得出的结论是不是:cte本身不是临时表的概念,而是视图这样的概念。

    但是CTE不支持 包含了多表的操作,即使里面查询出来的结果只是单表的

    视图或函数 't' 不可更新,因为修改会影响多个基表。

  • 相关阅读:
    LeetCode 449. Serialize and Deserialize BST
    LeetCode Word Abbreviation
    LeetCode 402. Remove K Digits
    LeetCode 439. Ternary Expression Parser
    LeetCode Frog Jump
    LeetCode 630. Course Schedule III
    LeetCode 729. My Calendar I
    LeetCode 567. Permutation in String
    LeetCode Find Permutation
    LeetCode Number of Atoms
  • 原文地址:https://www.cnblogs.com/dingdingmao/p/3146530.html
Copyright © 2020-2023  润新知