求SQL语句:取每一组的ID 最小的记录

kuevins 2005-07-05 05:35:38
有两个 table:
(1)Customer
CUST_ID | CUST_NAME
-------------------------------------
IBM | IBM Corp.
MS | Microsoft

(2)Product
CUST_ID | PRODUCT_ID | PRODUCT_NAME
-------------------------------------
IBM | I1000 | SERVER
IBM | I1001 | DATABASE
MS | M2222 | OFFICE
MS | M2223 | WINDOWS

现在我想要这两个表关联,每一家公司只取 PRODUCT_ID 最小的那一笔资料,即结果集为:
CUST_ID | CUST_NAME | PRODUCT_ID | PRODUCT_NAME
-----------------------------------------------
IBM | IBM Corp. | I1000 | SERVER
MS | Microsoft | M2222 | OFFICE

我知道可以用子查询来实现:
select ...
from Customer cust,
(select cust_id, min(product_id) from Product group by cust_id) prod
where cust.cust_id = prod.cust_id

但我不能这样做,因为还要串到其他表,要做很复杂的连接。
所以想请教各位大侠,是否有其他更便捷的方式??


...全文
530 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
辉说慧语 2005-07-06
  • 打赏
  • 举报
回复
mark
kmlinda 2005-07-06
  • 打赏
  • 举报
回复
select ...
from Customer cust,product prod
where cust.cust_id=prod.cust_id
and prod.product_id=(select min(product_id) from product where cust_id=prod.cust_id)
其实一样,性能可能还差一点
UandM 2005-07-05
  • 打赏
  • 举报
回复
我觉得
select ...
from Customer cust,
(select cust_id, min(product_id) from Product group by cust_id) prod
where cust.cust_id = prod.cust_id
就很好阿
沝林 2005-07-05
  • 打赏
  • 举报
回复
select ...
from
(select Product.*, row_number() over(partition by cust_id order by PRODUCT_ID) rk from Product)
where rk = 1

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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