有两个表,结构分别如下:
orders(order_id,order_name)
数据为:
1,订单1
order_product(product_id,product_name,order_id)
1,产品1,1
2,产品2,2orders表与order_product表是一对多的关系现在我要查找记录:
select o.order_id,p.product_name from orders o left join order_product p on o.order_id=p.order_id
这样将会得到两条记录
1,产品1
1,产品2但现在我业务要求,不管订单对应几个产品,只显示第一个产品信息,要求得到的记录如下:
1,产品1请问这条语句怎么写????????????????我尝试用:
select distinct(o.order_id),p.product_name from orders o left join order_product p on o.order_id=p.order_id
得到的还是两条记录select distinct(o.order_id from orders o left join order_product p on o.order_id=p.order_id
这样得到的就是一条记录,但我一定要列出产品名称,所以这种方式也不行

解决方案 »

  1.   

    增加一条sql问句:
    orders 表
    order_id,order_reig_id
    数据如下:
    1,1
    2,1
    3,1
    4,2
    5,2
    我现在要显示order_reig_id中的第一个order_id,显示记录应如下:
    1,1
    4,2
    请问此条语句怎么写,求高手指教????????????
      

  2.   

    select o.order_id,p.product_name,row_number()over(partition by o.order_id order by p.product_id)
    from orders o,order_product p
    where o.order_id = p.order_id--你上面的这个又是什么玩意啊?orders表的结构怎么又变了,啥乱七八糟的啊?先自己捋清楚了再问
      

  3.   

      order_reig_id这东西哪跑出来的额?
      
      

  4.   

    WITH orders AS(
    SELECT '1' order_id ,'订单1' order_name
    FROM dual
    UNION ALL
    SELECT '2' order_id ,'订单2' order_name
    FROM dual
    ) ,
     order_product AS(
    SELECT 
    '1'product_id ,'产品1' product_name,'1'order_id FROM dual
    UNION ALL
    SELECT '2' ,'产品2','2' FROM dual
    UNION ALL
    SELECT '2' ,'产品2','1' FROM dual
    UNION ALL
    SELECT '1' ,'产品1','2' FROM dual
    )
    SELECT order_id,product_name
    FROM(
    SELECT orders.order_id, order_product.product_name, rank() over(PARTITION BY orders.order_id ORDER BY orders.order_id,order_product.product_id ) rn_
    FROM order_product, orders
    WHERE orders.order_id = order_product.order_id) a
    WHERE a.rn_ = 1第二个sql语句思想和这个一样,稍微改一下即可!
      

  5.   


    WITH orders AS(
    SELECT '1' order_id ,'订单1' order_name
    FROM dual
    UNION ALL
    SELECT '2' order_id ,'订单2' order_name
    FROM dual
    ) ,
     order_product AS(
    SELECT  
    '1'product_id ,'产品1' product_name,'1'order_id FROM dual
    UNION ALL
    SELECT '2' ,'产品2','2' FROM dual
    UNION ALL
    SELECT '2' ,'产品2','1' FROM dual
    UNION ALL
    SELECT '1' ,'产品1','2' FROM dual
    )
    SELECT order_id,product_name
    FROM(
    SELECT orders.order_id, order_product.product_name, rank() over(PARTITION BY orders.order_id ORDER BY orders.order_id,order_product.product_id ) rn_
    FROM order_product, orders
    WHERE orders.order_id = order_product.order_id) a
    WHERE a.rn_ = 1昨天没仔细看,还以为增加的那个表是新表,同#2 #3一样迷糊中!