我对此查询有疑问:
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
生成错误
Msg 156,Level 15,State 1,Line 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
更新:感谢Sebas的帮助
*此查询是否有另一种方法可以确保速度性能,因为我对待2500 MAILITM_FID?*
有人可以帮忙吗? 感谢
答案 0 :(得分:3)
在WHERE
语法下移动LEFT OUTER JOIN
语法。
LEFT OUTER JOIN
必须是FROM
声明的一部分。
答案 1 :(得分: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))
我没有检查你的联接的逻辑,我只是移动它们。试试看是否还有这种语法错误..