解决方案 »

  1.   

    WITH CTE 只能用到第一句上面你的应用,可以使用 表变量或临时表
      

  2.   

    with aa as
    (
    select 1 a
    ),aa1 as (
    select * from aa)
    select * from aa1
      

  3.   

    临时表我不用试因为我这边涉及到oracle,想做到通用
      

  4.   

    CTE 只能对下一个语句有效。这是他的作用域问题。
    with aa as
    (
    select 1 a
    )
    select * from aa
    go
    with aa as
    (
    select 1 a
    )
    select * from aa写2次就好了。或者用派生表
      

  5.   

    你可以看下,你会了解更多
    http://www.cnblogs.com/changbluesky/archive/2010/03/17/1687886.html
      

  6.   

    with as 后面只能做一件事。用临时表#吧。
      

  7.   

    [我上面的sql只是举个例子,由于sql太长没有踢出来,我真实的两步都是操作,一个是更新,一个是插入
      

  8.   

    表变量不行吗?
    我上面的sql只是举个例子,由于sql太长没有踢出来,我真实的两步都是操作,一个是更新,一个是插入

    表变量不行吗
      

  9.   

    用临时表当然可以,我不用是因为我们公司oracle创建临时表太麻烦
      

  10.   

    oracle创建临时表不能再sql中创建,还要跟领导申请,批准后由项目经理添加到工程的更新语句中,然后还要专门的人编译出来放到我们公司的管理工具中,然后选择一个oracle库,处理表结构,就这些已经够麻烦的了吧
      

  11.   

    是你们公司流程麻烦
    不同数据库,你就区别处理吧, ORACLE好像可以用表类型~~
      

  12.   

    merge也只能一次要么更新要么删除,所以你换临时表或者两个CTE之类的
      

  13.   


    select * from (select  1 a from dual)a
    select * from (select  1 a from dual)a
    ORACLE 这样不行吗?
      

  14.   

    分两次操作CTE表达式即可
    with aa as
    (
    select 1 a
    )
    select * from aawith aa as
    (
    select 1 a
    )
    select * from aa
      

  15.   

    分有点少,分配降序,分配不均匀的请谅解,不过表变量这个让我学到了东西,没有给分的人,可以回复,我加分
    最后sqlserver用的表变量,oracle不会用表变量,在网上找了一下,慢麻烦的,oracle用了临时表。楼上有个人说用子查询,子查询中的逻辑比较多或者这个子查询很多地方都要用到,肯定不适合,效率会大大折扣