2014-11-05 3 views
0

У меня есть запрос Oracle, который работает в базе данных Oracle. Но когда я пытаюсь переместить его в MySQL, у меня есть синтаксическая ошибка, и я не могу понять, где ошибка.Изменить запрос Oracle на MySQL - ошибка синтаксиса

Oracle запрос:

DELETE FROM tec_valid_codes 
       WHERE code IN 
         (SELECT a.oldacctnbr 
          FROM tec_onoff_file a, 
           tec_onoff_file b, 
           tec_valid_codes c 
          WHERE  a.curracctnbr = b.curracctnbr 
           AND a.oldacctnbr <> b.oldacctnbr 
           AND a.transtype = 'COMB' 
           AND b.transtype = 'COMB' 
           AND a.oldacctnbr = c.code 
         MINUS 
          SELECT MAX (c.oldacctnbr) 
          FROM tec_valid_codes tvc, 
            (SELECT a.oldacctnbr, a.curracctnbr 
            FROM tec_onoff_file a, tec_onoff_file b 
            WHERE  a.curracctnbr = b.curracctnbr 
              AND a.oldacctnbr <> b.oldacctnbr 
              AND a.transtype = 'COMB' 
              AND b.transtype = 'COMB') c 
          WHERE tvc.code = c.oldacctnbr 
         GROUP BY curracctnbr); 

И мой запрос MySQL, который не работает:

DELETE FROM tec_valid_codes vc 
       WHERE vc.code IN 
        (SELECT t1.oldacctnbr FROM 
         (SELECT a.oldacctnbr 
         FROM tec_onoff_file a, 
          tec_onoff_file b, 
          tec_valid_codes c 
         WHERE a.curracctnbr = b.curracctnbr 
         AND a.oldacctnbr <> b.oldacctnbr 
         AND a.transtype = 'COMB' 
         AND b.transtype = 'COMB' 
         AND a.oldacctnbr = c.code) as `t1` 
        WHERE t1.oldacctnbr NOT IN 
         (SELECT MAX(c.oldacctnbr) 
         FROM tec_valid_codes tvc, 
          (SELECT a.oldacctnbr, a.curracctnbr 
          FROM tec_onoff_file a, tec_onoff_file b 
          WHERE a.curracctnbr = b.curracctnbr 
          AND a.oldacctnbr <> b.oldacctnbr 
          AND a.transtype = 'COMB' 
          AND b.transtype = 'COMB') as `c` 
         WHERE tvc.code = c.oldacctnbr) 
        GROUP BY vc.curracctnbr); 

У меня есть ошибка в этой строке:

'vc 
    WHERE vc.code IN 
    (SELECT t1.oldacctnbr FROM 
     (SELECT a.oldacctn' 

Я не вижу синтаксическая ошибка здесь. Где я ошибаюсь? И будет ли мой MySQL-запрос работать правильно?

Отредактировано: Мое решение:

DELETE FROM tec_valid_codes 
      WHERE code IN 
       (SELECT t1.oldacctnbr FROM 
        (SELECT a.oldacctnbr 
        FROM tec_onoff_file a, 
         tec_onoff_file b, 
         tec_valid_codes c 
        WHERE a.curracctnbr = b.curracctnbr 
        AND a.oldacctnbr <> b.oldacctnbr 
        AND a.transtype = 'COMB' 
        AND b.transtype = 'COMB' 
        AND a.oldacctnbr = c.code) as `t1`) 
      AND code NOT IN 
       (SELECT t2.oldcode FROM 
        (SELECT MAX(c.oldacctnbr) as oldcode 
        FROM tec_valid_codes tvc, 
         (SELECT a.oldacctnbr, a.curracctnbr 
         FROM tec_onoff_file a, tec_onoff_file b 
         WHERE a.curracctnbr = b.curracctnbr 
         AND a.oldacctnbr <> b.oldacctnbr 
         AND a.transtype = 'COMB' 
         AND b.transtype = 'COMB') as `c` 
        WHERE tvc.code = c.oldacctnbr 
        GROUP BY curracctnbr) as `t2`); 

Правильно ли запрос?

+0

все тоже, что ошибки вы получаете ?? –

+0

Точно: 'SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка i n ваш синтаксис SQL; проверьте руководство, которое соответствует вашему MySQL серверу v ersion на право синтаксиса использовать вблизи 'VC ГДЕ vc.code В (SELECT t1.oldacctnbr FROM (ВЫБРАТЬ a.oldacctn' в строке 1' – RexHunt

ответ

0

У вас есть (по крайней мере) небольшая ошибка в конце:

GROUP BY vc.curracctnbr 

Должно быть что-то от t1:

GROUP BY t1.curracctnbr 
+0

спасибо. Когда я исправлю это, я нашел еще один. – RexHunt

+0

@RexHunt :) Ваш запрос выглядит слишком сложно – Multisync

+0

@Multusync Я знаю, но я не автор. – RexHunt