0

このクエリに問題があります:

SELECT     RTRIM(LTRIM(L_MAILITMS.MAILITM_FID)) AS Ref30
         , IsNull (Ref33,0) as Ref33
FROM       L_MAILITM_EVENTS 
   INNER JOIN L_MAILITMS ON L_MAILITM_EVENTS.MAILITM_PID = L_MAILITMS.MAILITM_PID 
WHERE  (L_MAILITMS.MAIL_CLASS_CD = 'E') 
   AND (L_MAILITM_EVENTS.EVENT_OFFICE_CD = 1063) 
   AND (L_MAILITM_EVENTS.EVENT_TYPE_CD = 30) 
   AND (L_MAILITM_EVENTS.EVENT_GMT_DT >= CONVERT(DATETIME, '2012-05-27 00:00:00', 102)) 
   AND (L_MAILITM_EVENTS.EVENT_GMT_DT < CONVERT(DATETIME, '2012-05-28 00:00:00', 102))
LEFT OUTER JOIN 
  (
    SELECT   RTRIM(LTRIM(L_MAILITMS_1.MAILITM_FID)) as Ref3033
           , COUNT(*) as Ref33
    FROM     L_MAILITM_EVENTS as L_MAILITM_EVENTS_1 
       INNER JOIN  L_MAILITMS as L_MAILITMS_1 ON L_MAILITM_EVENTS_1.MAILITM_PID = L_MAILITMS_1.MAILITM_PID
    WHERE  (L_MAILITMS_1.MAIL_CLASS_CD = 'E') 
       AND (L_MAILITM_EVENTS_1.EVENT_OFFICE_CD = 1063) 
       AND (L_MAILITM_EVENTS_1.EVENT_TYPE_CD = 33) 
       AND (L_MAILITM_EVENTS_1.EVENT_GMT_DT >= CONVERT(DATETIME, '2012-05-27 00:00:00', 102))
    GROUP BY L_MAILITMS_1.MAILITM_FID
  )  ON L_MAILITMS.MAILITM_FID = L_MAILITMS_1.MAILITM_FID

エラーが発生する

メッセージ 156、レベル 15、状態 1、行 7
キーワード「LEFT」付近の構文が正しくありません。
メッセージ 156、レベル 15、状態 1、行 16
キーワード「ON」付近の構文が正しくありません。

テーブル L_MAILITMS_EVENTS:

MAILITM_PID     EVENT_OFFICE_CD    EVENT_TYPE_CD
-----------------------------------------------------------
1               1063               30
2               1063               30
2               1063               33
3               1063               33
3               1063               30
4               1063               30

テーブル L_MAILITMS:

MAILITM_PID          MAILITM_FID        MAIL_CLASS_CD
-------------------------------------------------------
1                     123               E  
2                     452               E                
3                     369               E
4                     633               E

私が取得したいもの:

Ref30          Ref33
-----------------------
123            0
452            1
369            1
633            0

更新:ご協力ありがとうセバス

*私は約2500のMAILITM_FIDを扱っているので、このクエリの速度パフォーマンスを保証する別の方法はありますか?*

誰でも助けることができますか?ありがとう

4

2 に答える 2

3

WHERE構文を構文の下に移動しますLEFT OUTER JOIN

LEFT OUTER JOINFROMステートメントの一部である必要があります。

于 2012-06-03T23:31:34.793 に答える
0

次に、結合の配置を変更します。

    SELECT     RTRIM(LTRIM(m.MAILITM_FID)) AS Ref30
         , IsNull (Ref33,0) as Ref33
FROM       L_MAILITM_EVENTS me
   INNER JOIN L_MAILITMS m ON me.MAILITM_PID = m.MAILITM_PID
   LEFT OUTER JOIN (
            SELECT   RTRIM(LTRIM(m1.MAILITM_FID)) as Ref3033
                   , COUNT(*) as Ref33
            FROM     L_MAILITM_EVENTS me1
                        INNER JOIN L_MAILITMS m1 ON me1.MAILITM_PID = m1.MAILITM_PID
            WHERE  (m1.MAIL_CLASS_CD = 'E') 
               AND (me1.EVENT_OFFICE_CD = 1063) 
               AND (me1.EVENT_TYPE_CD = 33) 
               AND (me1.EVENT_GMT_DT >= CONVERT(DATETIME, '2012-05-27 00:00:00', 102))
            GROUP BY m1.MAILITM_FID
  ) oj ON m.MAILITM_FID = oj.Ref3033 
WHERE  (m.MAIL_CLASS_CD = 'E') 
   AND (me.EVENT_OFFICE_CD = 1063) 
   AND (me.EVENT_TYPE_CD = 30) 
   AND (me.EVENT_GMT_DT >= CONVERT(DATETIME, '2012-05-27 00:00:00', 102)) 
   AND (me.EVENT_GMT_DT < CONVERT(DATETIME, '2012-05-28 00:00:00', 102))

私はあなたの結合の論理をチェックしませんでした、私はそれらを動かしただけです。この構文エラーがまだあるかどうか試してみてください。

于 2012-06-04T00:52:26.167 に答える