求一条SQL2005中四张表连接查询语句。

在SQL2000中,我可以使用下面语句进行查询正确结果。而在安装SQL2005中却没有记录,请帮忙找下原因。非常感谢!setrs=server.CreateObject(... 在SQL2000中,我可以使用下面语句进行查询正确结果。而在安装SQL2005中却没有记录,请帮忙找下原因。非常感谢!
set rs=server.CreateObject("adodb.recordset")
rs.open "select * from Product_M left join Category_M on Product_M.Category_id=Category_M.id left join Modality_M on Product_M.Modality_id=Modality_M.id left join Vender_M on Product_M.vender_id=Vender_M.id",conn,1,1 -----在SQL2005中显示不出来记录,我想主要查询出所有产品记录,但需要显示其Category所属大类名称,还有Modality所属小类名称,还有Vender供应商的名称。
一、补充一下,以下是错误提示:
错误类型:
Microsoft OLE DB Provider for SQL Server (0x80040E0E)
书签无效

二、我删除了一些Product数据,然后正常了。但是却没有数据,经过我一步步测试,发现原来是如果Product_M.Category_id在Category_M中不存在,记录就无法显示,这和SQL2000不一样,SQL2000如果产品找不到大类ID,则显示空值,而不会连Product记录都不显示。
怎么才能让它如果找不到大类ID,也要显示产品记录,然后大类名称自动显示空值就行。

三、是这样的,经过大家的帮助和我不断的测试,我已经找到问题的所在了。我做了最小的测试:
<%set rs=server.CreateObject("adodb.recordset")
rs.open "select * from Product_M left join Modality_M on Product_M.Modality_id=Modality_M.id",conn,1,1
do while not rs.eof and not rs.bof
response.Write rs("ID")&"<BR>"
rs.movenext
loop%>

问了百度不知道,问了CSDN也不知道,我自己终于试出来原因! 成功!! 哈哈!~~~~ 天才……

原因是,Conn,1,1 让SQL2005指针只能向下移,不能向上移,改成Conn,2,1就OK了! 哈哈~~
展开
 我来答
badkano
2009-05-12 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部
第一,你数据库导过来了吗?
第二,是否有些字段属性变了,譬如在2000里,id为int型,而在2005里,id为char型了?
第三,你是查询无记录还是报错?如果报错的话把错误发上来

你这个sql语法肯定是没问题的
2005比2000是多了些功能,但肯定影响不了你这个sql语句的发挥
最好select * from 表

把每个表都查看一遍,看和2000里的条数是否一致
----------------补充------------
你可以这样,你这里一共做了4个左连接,能不能改成left out join ?
或者你现在一共是连了4个表,一个个表的做left join ,看看到底是哪个表出的问题,这样一步步检查可能效果能好一些
haoyuzhou009
2009-05-12 · TA获得超过493个赞
知道小有建树答主
回答量:440
采纳率:0%
帮助的人:155万
展开全部
select * from Product_M A
left join Category_M B on A.Category_id=B.id
left join Modality_M C on A.Modality_id=C.id
left join Vender_M D on A.vender_id=D.id
感觉是你的表结构变了,不应该出现你这样的问题。
建议将2005的表删除了再重新建表。再导入数据。
left join 右连接 我用2000 2005 也没有见过这样的问题哟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
roy_88
2009-05-12 · TA获得超过3696个赞
知道大有可为答主
回答量:2914
采纳率:100%
帮助的人:2722万
展开全部
查看表里数据是否一致,结构是否一致

语句在SQL2000、2005都是一样的。

楼主把
select *--改为指定显示的列,楼主有没有处理null的情况。
这一步可以放在脚本上,如:isnull(col,'')/isnull(col,0)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wshy0772
2009-05-12 · TA获得超过655个赞
知道答主
回答量:40
采纳率:0%
帮助的人:24.8万
展开全部
先检查一下是不是其它地方还做了过滤查询什么的!

看了下你的语句,没有什么问题,你单独将语句拿到数据库查询下,查得出就说明不是数据库问题.应该是程序其它地方做了其它什么操作!

如果不行的试试我这句,有什么问题可以再联系.
select Product_M.*,
(SELECT Top 1 大类名称 FROM Category_M WHERE Product_M.Category_id=Category_M.id),
(SELECT Top 1 大类名称 FROM Modality_M WHERE Product_M.Modality_id=Modality_M.id),
(SELECT Top 1 大类名称 FROM Vender_M WHERE Product_M.vender_id=Vender_M.id)
from Product_M
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式