2012-07-16 26 views
0

查詢是讓每個表的日期,我已經檢查了我的代碼,但它還是錯誤的「每一個派生的表必須有它自己的別名錯誤」得到錯誤 - 每一個派生表必須有它自己的別名錯誤


SELECT T.* 
    FROM (
    SELECT DISTINCT(DATE_FORMAT(p.deliverDate, '%M')) as PDate 
    FROM piglet_po p 
    WHERE p.raiserID = '0025' AND p.rotationNo = '3' 

     AND p.deliverDate NOT IN 
     (SELECT DISTINCT(DATE_FORMAT(f.issuedDate, '%M')) as FDate 
      FROM feed_slip f    
      WHERE f.raiserID = '0025' AND f.issuedDate BETWEEN '2012-06-01' AND '2012-11-01'     

      AND f.issuedDate NOT IN 
      (SELECT DISTINCT(DATE_FORMAT(v.issuedDate, '%M')) as VDate 
       FROM vet_slip 
       WHERE v.raiserID = '0025' AND v.issuedDate BETWEEN '2012-06-01' AND '2012-11-01' 

      AND v.issuedDate NOT IN 
      (SELECT DISTINCT(DATE_FORMAT(w.issuedDate, '%M')) as WDate 
       FROM weight_slip w 
       WHERE w.raiserID = '0025' AND w.issuedDate BETWEEN '2012-06-01' AND '2012-11-01'          
      ) 
     ) 

    ) T 
+2

你可以從你的日期,這可能是什麼擰起來的一個後忘記引號的格式見。 – 2012-07-16 01:33:18

+1

[每個派生表必須有自己的別名]的可能重複(http://stackoverflow.com/questions/1888779/every-derived-table-must-have-its-own-alias) – 2012-07-16 01:33:44

+0

@ZaneBien感謝您的注意..我檢查了我的系統代碼沒有缺失的引文,我編輯了我的帖子.. – 2012-07-16 01:42:30

回答

1

你忘了別名v在:

 SELECT DISTINCT(DATE_FORMAT(v.issuedDate, '%M')) as VDate 
      FROM vet_slip 
     WHERE v.raiserID = '0025' AND 
       v.issuedDate BETWEEN '2012-06-01' AND '2012-11-01' 

還有一個右括號丟失,AFAICT。如果你只是放棄了最後一個,那麼別名T是錯誤的地方。我認爲這是被刪除的「內部括號」之一。

修正查詢,因此:

SELECT T.* 
    FROM (SELECT DISTINCT(DATE_FORMAT(p.deliverDate, '%M')) as PDate 
      FROM piglet_po p 
     WHERE p.raiserID = '0025' AND p.rotationNo = '3' 
      AND p.deliverDate NOT IN 
       (SELECT DISTINCT(DATE_FORMAT(f.issuedDate, '%M')) as FDate 
        FROM feed_slip f    
       WHERE f.raiserID = '0025' 
        AND f.issuedDate BETWEEN '2012-06-01' AND '2012-11-01' 
        AND f.issuedDate NOT IN 
         (SELECT DISTINCT(DATE_FORMAT(v.issuedDate, '%M')) as VDate 
          FROM vet_slip v 
         WHERE v.raiserID = '0025' 
          AND v.issuedDate BETWEEN '2012-06-01' AND '2012-11-01' 
          AND v.issuedDate NOT IN 
           (SELECT DISTINCT(DATE_FORMAT(w.issuedDate, '%M')) as WDate 
            FROM weight_slip w 
           WHERE w.raiserID = '0025' 
            AND w.issuedDate BETWEEN '2012-06-01' AND '2012-11-01' 
           ) 
         ) 
       ) 
     ) T 
+0

它只返回PDate ..它需要返回FDate,VDate和WDate的所有日子, 0025在發佈日期 – 2012-07-16 02:50:19

+0

這是一個非常不同的問題 - 並且是一個完全獨立的問題。我認爲已經修復了語法,但是由您來修復查詢的邏輯。我不明白你在尋找什麼,也不知道你爲什麼擁有深度嵌套的邏輯。我也不是那麼感興趣。你問'爲什麼你會得到一個特定的語法錯誤',並且有兩個可識別的問題可能導致你看到它,這兩個問題都在修改的查詢中修復。 – 2012-07-16 02:52:06

相關問題