永发信息网

sql2005的一个sql问题

答案:5  悬赏:60  手机版
解决时间 2021-07-28 23:14
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-07-28 12:07

有这么一个sql

select count(*) from (
select f.shop_id as shopId
,s.shop_name as shopName
,s.shop_logo as src
,s.[user_id] as userId
,u.user_names as userName
,s.shop_time as shopTime
,c.category_name as categoryName
,p.sale_honour as honour
,s.sale_counts as saleCounts
,a.favorCounts
,f.[type]
from
t_sns_favor as f
,t_sns_user as u
,t_sns_shop as s
,t_sns_user_points as p
,t_sns_category as c
,(select count(*) as favorCounts,shop_id as id
from t_sns_favor where [user_id]=0 group by shop_id ) a
where
f.shop_id=s.shop_id
and s.[user_id]=u.[user_id]
and s.sale_type=c.category_id
and u.[user_id]=p.[user_id]
and a.id=f.shop_id
and f.[user_id]=0
) as a

在sql2005测试过sql 没有问题 可以执行

但是在代码里面一运行就出现下面错误

com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'where' 附近有语法错误

在程序中打印出来的sql也同样能在sql2005中执行 这是为什么??请高手指点

最佳答案
  • 五星知识达人网友:荒野風
  • 2021-07-28 13:39
可能是数据库接口驱动不支持复杂SQL语句吧,你可以把以上代码建立成一个存储过程,然后调用存储过程就可以了,这也是最好的做法,存储过程可以预先编译和优化,而直接使用SQL语句,每次都要重新编译.存储过程对于复杂SQL语句提速效果很明显.
全部回答
  • 1楼网友:西风乍起
  • 2021-07-28 17:08

既然sql能直接运行,就说名不是sql的问题,请查看传入的参数类型是否有误

  • 2楼网友:忘川信使
  • 2021-07-28 16:33

想问一下你,

from t_sns_favor where [user_id]=0 group by shop_id ) a

这里最后一个a是做什么用的?

  • 3楼网友:不甚了了
  • 2021-07-28 15:15

我想你的SQL语句拼接的时候。在WHERe左右两边没有预留空格。

SQL语句关键字边上必须存在空格以区分的。这个问题我也遇到过。你不妨看看是不是这个问题。

  • 4楼网友:夜余生
  • 2021-07-28 14:31
把最外面那个 as a改成 as aa试试,别重名
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯