2014-11-05 39 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查詢,不工作:

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

我不明白:

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); 

我在這行有錯誤語法錯誤在這裏。我錯在哪裏?我的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

Excatly什麼樣的錯誤你好嗎? – 2014-11-05 14:40:31

+0

正確: 'SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法中有錯誤i ;檢查對應於你的MySQL v服務器 版爲手動進行正確的語法使用近 'VC WHERE vc.code IN (SELECT t1.oldacctnbr FROM (選擇a.oldacctn' 在行1' – RexHunt 2014-11-05 14:43:21

回答

0

你有(至少)在最後一個小錯誤:

GROUP BY vc.curracctnbr 

應該從T1的東西:

GROUP BY t1.curracctnbr 
+0

感謝。當我修復它,我發現了一個。 – RexHunt 2014-11-06 15:44:27

+0

@RexHunt :)你的查詢看起來太複雜了 – Multisync 2014-11-06 15:45:47

+0

@Multusync我知道,但我不是作者。 – RexHunt 2014-11-06 15:47:57