代码之家  ›  专栏  ›  技术社区  ›  Heather

SQL Anywhere:尝试使用联接删除子查询的结果时出错

  •  0
  • Heather  · 技术社区  · 6 年前

    我创建了以下脚本以查找深度为其他行+2英尺的行:

    select a.*
    from   WELL_FORMATION a,
           WELL_FORMATION b
    where  a.UWI=b.UWI
    and    a.FORM_ID=b.FORM_ID
    and    a.SOURCE != 'ABCD'
    and    b.SOURCE  = 'ABCD'
    and    abs(a.GX_FORM_TOP_DEPTH - b.GX_FORM_TOP_DEPTH) <= 2
    

    这个脚本返回我所需要的。现在我需要从这个查询中删除结果。

    使用找到的信息 here ,我想到了以下几点:

    DELETE t1
    from well_formation t1
    inner join
    (
        select a.*
        from   WELL_FORMATION a,
               WELL_FORMATION b
        where  a.UWI=b.UWI
        and    a.FORM_ID=b.FORM_ID
        and    a.SOURCE != 'ABCD'
        and    b.SOURCE  = 'ABCD'
        and    abs(a.GX_FORM_TOP_DEPTH - b.GX_FORM_TOP_DEPTH) <= 2
    ) t2 on t1.uwi=t2.uwi
         and t1.form_id=t2.form_id
         and t1.source=t2.source
    

    但是,我收到一条错误消息,指出Sybase找不到名为T1的表。当我从删除后删除“T1”时,会在内部联接上得到一个错误。

    我知道我得到了正确的结果,因为如果我用“select*”替换“delete T1”,我就得到了要删除的记录。

    我在任何地方使用SQL。有人对我还能尝试什么有什么建议吗?

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  0
  •   Rob Simmermon    6 年前

    删除时,需要使用“as T1”对表进行别名。

    因此,替换此行:

    来自T1井组

    用这个:

    来自T1井组

        2
  •  0
  •   Heather    6 年前

    显然,从我和之交谈过的每个人来看,这是SQL在任何地方的一个特殊的怪癖。我所拥有的语句在Oracle中甚至在Transact-SQL中都可以正常工作,但它不是SQL标准的一部分。

    然而,终于有人找到了一些有用的东西。它要求使用2个From子句。

    下面是最后的脚本:

    delete 
    from well_formation as t1
    from well_formation as t2
    where  t1.UWI=t2.UWI
    and    t1.FORM_ID=t2.FORM_ID
    and    t1.SOURCE != 'ABCD'
    and    t2.SOURCE  = 'ABCD'
    and    abs(t1.GX_FORM_TOP_DEPTH - t2.GX_FORM_TOP_DEPTH) <= 2;
    

    希望这能帮助其他遇到这个问题的人。