一个关于内查询的问题,实在不明白

arwenchen 2006-05-28 10:27:15
这是在本版看到的一个例子,但我有点不明。
表的结构如下:
create table price(p_productID int ,p_price int,p_userID int)
insert price select 1,500,10
union all select 1,1000,8
union all select 1,200,2
union all select 2,200,10
union all select 2,300,2
union all select 3,500,10
union all select 3,200,3
union all select 4,500,10
union all select 4,400,3
GO
查询语句如下:
Select * from price A
where A.p_price in( select MAX(p_price) from price B GROUP BY B.p_productID)
为什么结果会这样呢:
p_productID p_price p_userID
1 500 10
1 1000 2
3 500 10
4 500 10
而将p_productID为1,p_userID为10的p_price改为600时,结果却又变成这样:
p_productID p_price p_userID
1 1000 2
3 500 10
4 500 10
恳请赐教!
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangpei2008 2006-05-29
  • 打赏
  • 举报
回复
同意楼上:)
  • 打赏
  • 举报
回复
爱世界杯的说得很明白了,结贴吧。
liangpei2008 2006-05-29
  • 打赏
  • 举报
回复
我的表达能力不好:)
对啊,Group by B.p_productid后
p_price的最大值列表是
1 1000
3 500
4 500
而A.p_price in( select MAX(p_price) from price B GROUP BY B.p_productID)即取上述列表
中Price为1000,500,500的所有值,而ID为1时也有价格为500的,故将其取出
arwenchen 2006-05-29
  • 打赏
  • 举报
回复
明白了。已结账。
arwenchen 2006-05-28
  • 打赏
  • 举报
回复
“p_productID=1的价格(500)与其它p_productID(500)相同,而SQL检索时只从最高价格列表中找到价格为500的就可以了,所以第一种情况产生!
当p_productID=1的价格与其它p_productID的价格不重复时,最高价格列表中的数据不会出现600,故产生第二种情况!”
问题是我用了GROUP BY B.p_productID语句后,一个p_productID的所有p_price不是只应该有一个最大值吗?
lxzm1001 2006-05-28
  • 打赏
  • 举报
回复
Select * from price A
where A.p_price in( select MAX(p_price) from price B GROUP BY B.p_productID)
这句看起来显然不行的。P_price又不是唯一的。这样肯定会有重复数据的。这结果不会是这样的
p_productID p_price p_userID
1 500 10
1 1000 2
3 500 10
4 500 10

应该是
p_productID p_price p_userID
1 500 10
1 1000 2
2      300   2
3 500 10
4 500 10
liangpei2008 2006-05-28
  • 打赏
  • 举报
回复
p_productID=1的价格(500)与其它p_productID(500)相同,而SQL检索时只从最高价格列表中找到价格为500的就可以了,所以第一种情况产生!
当p_productID=1的价格与其它p_productID的价格不重复时,最高价格列表中的数据不会出现600,故产生第二种情况!

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧