我创建了以下脚本来查找深度距另一行+ -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的表。当我从DELETE之后删除“ t1”时,内部联接出现错误。
我知道我得到了正确的结果,因为如果我将“ DELETE t1”替换为“ SELECT *”,则会得到要删除的记录。
我正在使用SQL Anywhere。有人对我还能尝试的方法有任何建议吗?
谢谢!
答案 0 :(得分:0)
删除时,您需要使用“ AS t1”为表加上别名
因此替换此行:
来自well_formation t1
与此:
来自well_formation AS t1
答案 1 :(得分:0)
显然,与我交谈过的每个人中,这都是SQL Anywhere的一个特殊之处。我拥有的该语句在Oracle甚至在Transact SQL中都可以正常运行,但是它不是SQL Anywhere中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;
希望这对遇到此问题的其他人有所帮助。