2014-10-30 2 views
0

У меня есть два запроса для оракула. И мне нужно изменить их для mysql. Первый запрос:Обновление: вы не можете указать таблицу таблицы целей для обновления в предложении FROM

UPDATE tec_onoff_file a 
SET emailtype = 'MIGR' 
WHERE EXISTS 
    (SELECT 1 
     FROM tec_onoff_file 
     WHERE emailtype = 'MIGR' 
     AND a.acctnbr = acctnbr 
     AND a.magabbr = magcodes); 

Я изменил его

update tec_onoff_file t1 
join tec_onoff_file t2 
    on t2.emailtype='MIGR' 
    and t1.acctnbr=t2.acctnbr 
    and t1.magabbr=t2.magcodes 
    set t1.emailtype='MIGR'; 

и она работает. Но второй запрос труднее для меня

update tec_onoff_file a 
set emailtype = 'REIN' 
where transtype = 'REIN' 
and curracctnbr not in (select curracctnbr from tec_onoff_file b 
    where emailtype ='RENW' 
    and a.curracctnbr=b.curracctnbr); 

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

+0

Предоставить запрос, который вы пытались – Slowcoder

+0

Для меня, второй логический запрос ничем не отличается от 'обновления tec_onoff_file в набор EmailType =«REIN» где TransType =«REIN» и (EmailType является NULL или EmailType ! = 'RENW') '. – Slowcoder

+0

@Slowcoder Спасибо, что ваш запрос проще и дает тот же результат, что и запрос от Strawberry. Теперь я знаю, что мне нужно больше узнать о sql. – RexHunt

ответ

0
UPDATE tec_onoff_file a 
    LEFT 
    JOIN tec_onoff_file n 
    ON b.curracctnbr = a.curracctnbr 
    AND b.emailtype ='RENW' 
    SET emailtype = 'REIN' 
WHERE a.transtype = 'REIN' 
    AND b.transtype IS NULL; 
+1

Объяснение не помешает. – Jubobs

+0

@Strawberry Спасибо, это работает, но я не понимаю, почему И b.transtype IS NULL; ? – RexHunt

+0

Это простое исключение. Оператор IS NULL просто возвращает строки из первого экземпляра таблицы, для которых нет соответствующих строк во втором. – Strawberry