求一条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了! 哈哈~~ 展开
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了! 哈哈~~ 展开
4个回答
展开全部
第一,你数据库导过来了吗?
第二,是否有些字段属性变了,譬如在2000里,id为int型,而在2005里,id为char型了?
第三,你是查询无记录还是报错?如果报错的话把错误发上来
你这个sql语法肯定是没问题的
2005比2000是多了些功能,但肯定影响不了你这个sql语句的发挥
最好select * from 表
把每个表都查看一遍,看和2000里的条数是否一致
----------------补充------------
你可以这样,你这里一共做了4个左连接,能不能改成left out join ?
或者你现在一共是连了4个表,一个个表的做left join ,看看到底是哪个表出的问题,这样一步步检查可能效果能好一些
第二,是否有些字段属性变了,譬如在2000里,id为int型,而在2005里,id为char型了?
第三,你是查询无记录还是报错?如果报错的话把错误发上来
你这个sql语法肯定是没问题的
2005比2000是多了些功能,但肯定影响不了你这个sql语句的发挥
最好select * from 表
把每个表都查看一遍,看和2000里的条数是否一致
----------------补充------------
你可以这样,你这里一共做了4个左连接,能不能改成left out join ?
或者你现在一共是连了4个表,一个个表的做left join ,看看到底是哪个表出的问题,这样一步步检查可能效果能好一些
展开全部
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 也没有见过这样的问题哟
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 也没有见过这样的问题哟
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
查看表里数据是否一致,结构是否一致
语句在SQL2000、2005都是一样的。
楼主把
select *--改为指定显示的列,楼主有没有处理null的情况。
这一步可以放在脚本上,如:isnull(col,'')/isnull(col,0)
语句在SQL2000、2005都是一样的。
楼主把
select *--改为指定显示的列,楼主有没有处理null的情况。
这一步可以放在脚本上,如:isnull(col,'')/isnull(col,0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先检查一下是不是其它地方还做了过滤查询什么的!
看了下你的语句,没有什么问题,你单独将语句拿到数据库查询下,查得出就说明不是数据库问题.应该是程序其它地方做了其它什么操作!
如果不行的试试我这句,有什么问题可以再联系.
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
看了下你的语句,没有什么问题,你单独将语句拿到数据库查询下,查得出就说明不是数据库问题.应该是程序其它地方做了其它什么操作!
如果不行的试试我这句,有什么问题可以再联系.
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询