首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SQL语句问题,请高手赐教,小弟不胜感激!!!!!! [已结贴,结贴人:binq2000]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 14:26:34 楼主
        小弟在些程序的时候遇到问题了,是这样的。
        A表中记录商品的信息,有 商品编号 库存数量 等字段。B表中记录商品的出售记录,有 商品编号 字段。
        我现在需要查询A表中哪些商品已出售了N个,我的做法比较笨,查询A表所有的记录,然后循环从1到A表的记录数,再从B表中查询 商品编号=A表商品编号 的记录数 判断得到的记录数如果等于N 则把该 商品编号 记录下来,循环完毕后 在A表中查询 商品编号 in 记录下来的商品编号,能实现我的想法,但是这样做比较慢,尤其是商品数量比较多的情况下,请问高手们有何办法解决,小弟对 SQL的AS 和 union 等语句不太熟悉,写不了!!!请高手赐教,小弟不胜感激!!!
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 14:44:221楼 得分:0
    select *,(select count(*) from saled where product_ID=a.product_ID) from product as a
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 14:52:552楼 得分:80
    select * from tblA where tblA.ID in (select tblB.ID from tblB where tblB.SaleCount >N)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 15:01:073楼 得分:0
    引用楼主 binq2000 的帖子:
        小弟在些程序的时候遇到问题了,是这样的。
        A表中记录商品的信息,有 商品编号 库存数量 等字段。B表中记录商品的出售记录,有 商品编号 字段。
        我现在需要查询A表中哪些商品已出售了N个,我的做法比较笨,查询A表所有的记录,然后循环从1到A表的记录数,再从B表中查询 商品编号=A表商品编号 的记录数 判断得到的记录数如果等于N 则把该 商品编号 记录下来,循环完毕后 在A表中查询 商品编号 in 记录下来的商品编…


    最好写上表结构,你的话不是很看得懂。

    select * from tblA where tblA.ID in
      (select tblB.ID from tblB group by tblB.id having (count(tblB.id)>N))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:33:304楼 得分:0
    谢谢楼上二位大哥的回复,表结构是这样的
    A表:
    商品编号 商品价格 库存数量
    B表:
    销售单号 商品编号 出售价格      注:出售数量都是1

    我要是实现的是如何得到哪些商品已经销售了N个,例如 我现在输入5 查询出来 上中已出售了五个的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:39:085楼 得分:0
    再说明一下  楼上大哥写的我看了,不是我想要的 其实我的想法说白了就是  查询A表中 哪些商品在B表中的出售记录为N条  不管每条记录的出售数量 我只要B表中对应的记录条数  例如A表中有1022 这个编号的商品,B表中有15条对应的出售记录 每条记录的内容暂且不管  当我输入15 的时候查询出来的结果就有1022这个商品 当然其他的商品在B表有15条记录的也一起查询出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:39:206楼 得分:0
    select A.商品编号,A.商品价格,A.库存数量,B.商品编号,conut(B.商品编号) from A,B where A.商品编号=B.商品编号 order by A.商品编号 desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:40:377楼 得分:20
    select A.商品编号,A.商品价格,A.库存数量,B.商品编号,count(B.商品编号) as bcount from A,B where A.商品编号=B.商品编号 order by A.商品编号 desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:41:398楼 得分:0
    select A.商品编号 as AID,A.商品价格 as Ajiage,A.库存数量 as Akucun,B.商品编号,count(B.商品编号) as bcount from A,B where A.商品编号=B.商品编号 order by A.商品编号 desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:42:299楼 得分:0
    还是没太看明白 呵呵

    暂时理解 B表自己就可以查出售数量 但是B表可能存在A表中不存在的商品编号 是这个意思吗?

    select a.商品编号,a.ct,b.库存数量 from (select 商品编号,count(商品编号) as ct from tbl_B
    group by 商品编号) a
    left outer join tbl_A b on a.商品编号=b.商品编号
    where a.ct=5
    and b.库存数量 is null

    上面的写法不是很友好 但是方便理解

    正规应该使用 having (count(*))>5 类似的写法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:43:3410楼 得分:0
    读取记录时:
    商品编号:rs("AID")
    商品价格:rs("Ajiage")
    商品库存:rs("Akucun")
    商品出售数量:rs("bcount")
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:45:3811楼 得分:0
    你B表中的编号,A表中怎么可能没有

    A表:
    商品编号 商品价格 库存数量 
    B表:
    销售单号 商品编号 出售价格      注:出售数量都是1

    你B是根据A表得来的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:46:4712楼 得分:0
    select A.商品编号 as AID,A.商品价格 as Ajiage,A.库存数量 as Akucun,B.商品编号,count(B.商品编号) as bcount from A,B where A.商品编号=B.商品编号 order by A.商品编号 desc
    你直接使用这个在查询分析器里查询一下就知道了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:48:3813楼 得分:0
    使用上面SQL语句时

    读取记录时:
    商品编号:rs("AID")
    商品价格:rs("Ajiage")
    商品库存:rs("Akucun")
    商品出售数量:rs("bcount")
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 16:54:2914楼 得分:0
    引用 5 楼 binq2000 的回复:
    A表:
    商品编号 商品价格 库存数量 
    B表:
    销售单号 商品编号 出售价格      注:出售数量都是1
    再说明一下  楼上大哥写的我看了,不是我想要的 其实我的想法说白了就是  查询A表中 哪些商品在B表中的出售记录为N条  不管每条记录的出售数量 我只要B表中对应的记录条数  例如A表中有1022 这个编号的商品,B表中有15条对应的出售记录 每条记录的内容暂且不管  当我输入15 的时候查询出来的结果就有1022这个商品 当然其他的商品在B表有15条记录的也一起查询出来


    我认为3楼的写法应该满足要求,不知道为什么不是lz想要的,把>改成=既可。
    SQL code
    select * from A where A.商品编号 in (select B.商品编号 from B group by B.商品编号 having (count(B.商品编号)=N))


    其中
    group by B.商品编号,即使按照商品分类
    having(count(B.商品编号)=N)即使满足出售单好等于N的。
      若是你要求具体出售数目为N,可改写为having(sum(B.每单销售数)=N)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:03:3015楼 得分:0
    A表中有N多的商品,可能有很多都满足我设定的已销售数量,我是要列出A表中哪些商品满足在B表中的记录条数等于我设定的销售数量,因为B表中每一条记录代表销售一个商品 没有销售数量这个字段,所以销售数量和记录条数是相等的,是一个意思。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:05:0116楼 得分:0

    看漏了一个条件,就是你还需要大于N或等于N
    select A.商品编号 as AID,A.商品价格 as Ajiage,A.库存数量 as Akucun,B.商品编号,count(B.商品编号) as bcount from A,B where A.商品编号=B.商品编号 group by B.商品编号 having (count(B.商品编号)>N)) order by A.商品编号 desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:12:2817楼 得分:0
    select * from A where A.商品编号 in
      (select B.商品编号 from B group by B.商品编号 having (count(B.商品编号)=N)) 

    这个似乎可以,但是得到的是一个记录,我要是得到是A表中 商品编号的 集合 类似于 1001,1002,1044,1058 这样的,返回一个这个的值,我好进行下一个步骤 ,得不到这个集合值我没法做下面的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:19:1518楼 得分:0
    select A.商品编号 as AID,A.商品价格 as Ajiage,A.库存数量 as Akucun,B.商品编号,count(B.商品编号) as bcount from A,B where A.商品编号=B.商品编号 group by B.商品编号 having (count(B.商品编号)>N)) order by A.商品编号 desc
    使用这个,可以得到所有大于N的销售记录
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:20:3819楼 得分:0
    使用等于N的话,就是销售记录必须等于N才会显示
    你数据库里只有一个产品销售等于N的记录吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:21:5920楼 得分:0
    要用IN的话
    select * from A where A.商品编号 in 
      (select B.商品编号 from B group by B.商品编号 having (count(B.商品编号)>=N))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:27:3421楼 得分:0
    谢谢楼上各位高手的指点,我把我的想法再详细的说一下:

    A表: 商品编号 商品名称 商品价格 库存数量 上架时间
    B表: 销售编号 商品编号 销售价格 销售时间          注释:由于商品的特殊性销售数量都为1 所以不做记录

    A表的 商品编号 和 B表的 商品编号 是对应的

    我现在要做的就是 输入一个数字 比如 10  就可以得到 A表中哪些商品在B表的销售记录(也可以理解为记录数)为10条,并且要得到的是A表的 商品编号 的集合 类似于 1001,1002,1044,1058 这样的,我这个想法是写成一个过程调用的 利用返回的 商品编号 的集合组合其他的条件还要再查询
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 17:55:4622楼 得分:0
    select * from A where A.商品编号 in
      (select B.商品编号 from B group by B.商品编号 having (count(B.商品编号)=N))
    谢谢这位大哥,这个方法是可行的,但是呢,我需要的到的符合条件的是 商品编号 的一个集合 这个怎么实现
    我用 select 商品编号 as x ………………  然后用rs("x")得到的只是第一条记录的 商品编号
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 18:15:1323楼 得分:0
    小弟用smartcatiboy大哥的办法 得到了记录,我用循环吧记录里的 商品编号 全部取出,速度比以前快了很多,谢谢了,
    smartcatiboy 80分  chinmo 20分  其他各位朋友实在不好意思,新人分数不够了,见谅啊!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-30 23:09:2424楼 得分:0
    用个连接吧,连接两个表就可以啦。具体看看上面的那些代码吧,偶还没看完代码。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-31 10:59:0425楼 得分:0
    谢谢楼上二位大哥的回复,表结构是这样的
    A表:
    商品编号 商品价格 库存数量 
    B表:
    销售单号 商品编号 出售价格      注:出售数量都是1

    我要是实现的是如何得到哪些商品已经销售了N个,例如 我现在输入5 查询出来 上中已出售了五个的。


    SQL code
    select A.商品编号,COUNT(B.*) AS QUANTITY from A,B WHERE A.商品编号=B.商品编号 and QUANTITY=你输入的数量 group by A.商品编号
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-31 11:04:5226楼 得分:0
    不好意思,写错个地方


    SQL code
    select A.商品编号,COUNT(B.*) AS QUANTITY from A,B
    WHERE A.商品编号=B.商品编号
    group by A.商品编号
    having count(B.*)>=你输入的数量
    [/Quote]
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved