SQL Anywhere: получение ошибки при попытке удалить результаты подзапроса с помощью объединения - PullRequest
0 голосов
/ 20 ноября 2018

Я создал следующий скрипт, чтобы найти строки, которые имели глубину + -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

Этот скрипт возвращает именно то, что мне нужно.Теперь мне нужно удалить результаты этого запроса.

Используя найденную информацию здесь , я получил следующее:

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» после DELETE, я получаю ошибку при внутреннем соединении.

Я знаю, что получаю правильные результаты, потому что если я заменю «DELETE t1» на «SELECT *», я получаюзаписи, которые я хочу удалить.

Я использую SQL Anywhere.У кого-нибудь есть предложения по поводу того, что еще я мог бы попробовать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Судя по всему, из всех, с кем я говорил, это особенность SQL Anywhere.Оператор, который у меня был, прекрасно работает в Oracle и даже в Transact SQL, но он не является частью стандарта SQL в SQL Anywhere.

Однако кто-то наконец смог найти что-то, что будет работать.Требуется использование 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;

Надеюсь, это поможет всем, кто сталкивается с этой проблемой.

0 голосов
/ 21 ноября 2018

При удалении вам нужно создать псевдоним для ваших таблиц, используя «AS t1»

. Замените эту строку:

из well_formation t1

следующим:

от well_formation AS t1

...