【问题标题】:convert non-ANSI join operators转换非 ANSI 连接运算符
【发布时间】:2013-07-26 22:19:54
【问题描述】:

我刚刚将我的 SQL Server 数据库从 2000 升级到 2005,兼容模式为 90,现在我发现我有一些使用非 ANSI 连接运算符的查询,这些在 SQL Server 2005 中不完全支持。所以我需要将以下代码转换为符合 ANSI 的格式。

FROM gaf (nolock),
     gaf_dress as D (nolock index = pkgaf_DRESS_GUM),
     gaf_dress as M (nolock index = pkgaf_DRESS_GUM),
     mobile (nolock index = pkmobileID),
     Quest (nolock index = pkQuestID)

WHERE
gaf.ID = mobile.ID
and gaf.DRESS_GUM_1 *= D.DRESS_GUM
and gaf.DRESS_GUM_2 *= M.DRESS_GUM
and gaf.ID *= Quest.ID
and gaf.RECORD=1
and na2.PURPOSE <> 'Doore'
and gaf.PD_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, convert(varchar(6), 
getdate(), 112) + '01')))

任何帮助将不胜感激。

这个我试过了

FROM Name (nolock)inner join mobile
on Name.ID = Demographics.ID left outer join NA1
on Name.ADDRESS_NUM_1 = NA1.ADDRESS_NUM left outer join NA2
on Name.ADDRESS_NUM_2 = NA2.ADDRESS_NUM left outer join ACSW
on Name.ID = ACSW.ID 
;with Name_Address (nolock,(index(pkName_AddressADDRESS_NUM)))as NA1
;with Name_Address (nolock, (index(pkName_AddressADDRESS_NUM))as NA2 ;with mobile(nolock, 
(index (pkmobileID))
;with ACSW (nolock, (index (pkACSWID)))
WHERE gaf.MEMBER_RECORD=1
and na2.PURPOSE <> 'MAIN'
and gaf.PAID_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, 
convert(varchar(6),  getdate(), 112) + '01'))) 

但它向我抛出了这个错误“Msg 102, Level 15, State 1, Line 302 '(' 附近的语法不正确。”

【问题讨论】:

  • '*=' 表示左外连接,如果我没记错的话。
  • 在 SQL 2k 中肯定可以工作,但在 SQL 2k5 上不行
  • 我以前试过这个,但它给我这个错误“Msg 102, Level 15, State 1, Line 302 Incorrect syntax near '('.”

标签: sql sql-server tsql join


【解决方案1】:
FROM gaf
 INNER JOIN mobile ON gaf.ID = mobile.ID
 LEFT JOIN gaf_dress as D ON and gaf.DRESS_GUM_1 = D.DRESS_GUM 
 LEFT JOIN gaf_dress as M ON gaf.DRESS_GUM_2 = M.DRESS_GUM AND M.PURPOSE <> 'Doore'
 LEFT JOIN Quest ON gaf.ID = Quest.ID

WHERE gaf.RECORD=1
  AND gaf.PD_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, convert(varchar(6), 
getdate(), 112) + '01')))

【讨论】:

  • WOW sorry na2 代表 M
  • WHERE gaf.ID = mobile.ID---是否应该转换为内连接?
  • 是的,= 到 INNER,= 到 LEFT,= 到 RIGHT - 如果 na2 是 M,那么它也移动到 JOIN 条件
  • @user2524982 我现在有,但我不知道你想用那个查询做什么:) 你为什么不从顶部开始发布整个查询(FROM 不能打开顶部)并解释您的预期结果?可以肯定的一件事 - 这不是 CTE (With) 的使用方式。
猜你喜欢
  • 2016-11-25
  • 2017-03-15
  • 2014-07-08
  • 1970-01-01
  • 2017-04-08
  • 2011-01-20
  • 1970-01-01
  • 2014-03-27
  • 2017-03-29
相关资源
最近更新 更多