Sql 左外部联接生成不正确的语法
我对此查询有问题:Sql 左外部联接生成不正确的语法,sql,join,left-join,Sql,Join,Left Join,我对此查询有问题: 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 =
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
表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,所以此查询是否有其他方法可以确保速度性能?*
有人能帮忙吗?
谢谢将WHERE语法移到左侧外部联接语法下面
左外部联接必须是FROM语句的一部分。将WHERE语法移到左外部联接语法下面
左外部联接必须是FROM语句的一部分。然后让我修改联接的位置:
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))
我没有检查你连接的逻辑,我只是移动了它们。请尝试查看是否仍然存在此语法错误。然后让我修改连接的位置:
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))
我没有检查你连接的逻辑,我只是移动了它们。试试看是否还有这个语法错误。联接是FROM的子类,它们不能出现在Where联接是FROM的子类之后,它们不能出现在Where不起作用之后,我只有两个表,这两个表是分开的query@AymenRM:如果它不起作用,然后要么你做错了什么,要么你忘了添加一些关于你的查询的细节。Valamas的建议是正确的:您的左侧外部联接部分放错了位置,因为联接是FROM子句的一部分,WHERE子句必须在FROM之后,也就是说,在所有联接之后。希望此编辑能有所帮助,表L_MAILITM_EVENTS_1和L_MAILITM_1只是L_MAILITM_事件的图像,L_MAILITMplease发布您编辑的代码,因为这仍然是不正确的对不起,但我怎么能做到这一点?没有工作,我只有两个表,这两个是分开的query@AymenRM:如果它不起作用,则可能是您做错了什么,或者您忘记添加有关查询的一些详细信息。Valamas的建议是正确的:您的左侧外部联接部分放错了位置,因为联接是FROM子句的一部分,WHERE子句必须在FROM之后,也就是说,在所有联接之后。希望此编辑能有所帮助,表L_MAILITM_EVENTS_1和L_MAILITM_1只是L_MAILITM_事件的图像,L_MAILITMplease发布您编辑的代码,因为这仍然是不正确的对不起,但是我怎么做呢?感谢您的回复,但是在关键字“ON”附近出现语法错误Msg 156,级别15,状态1,第14行不正确的语法。Sql Server Enterprise Edition版本9.00.4035.00我现在更改了一些别名,联接没有可参考的别名。您现在可以试试吗?谢谢您的回复,但是在关键字“ON”附近出现语法错误Msg 156,级别15,状态1,第14行语法错误。Sql Server Enterprise Edition版本9.00.4035.00I现在更改了一些别名,联接没有可参考的别名。你现在能试试吗?