3个表PRODUCT_ID:商品编码
PRODUCT_NAME:商品名称
SRC:图片地址
MEMBER_NAME:用户账号  【PRODUCTS】 商品表
ID  PRODUCT_ID  PRODUCT_NAME
1      001           商品1
2      002           商品2
3      003           商品3【PRODUCT_PIC】商品图片表
ID  PRODUCT_ID  SRC
1      001       -
2      001       -
3      002       -
4      003       -
5      003       -【SHOPPING_CART】购物车表
ID  MEMBER_NAME  PRODUCT_ID
1     member1        001  
2     member1        002 
3     member1        003 
4     member2        001 
5     member2        002 查询的是【购物车】表,根据PRODUCT_ID得到【商品表】的PRODUCT_NAME 和 【商品图片表】的SRC现在用的SQL语句是:
select s.*,p.*,pic.* from SHOPPING_CART s,PRODUCTS p,PRODUCT_PIC pic where s.PRODUCT_ID = p.PRODUCT_ID and s.PRODUCT_ID = pic.PRODUCT_ID and s.MEMBER_NAME = 用户账号现在用的语句查询的数据有重复的,语句应该怎么写 

解决方案 »

  1.   

    出现重复,是因为你【PRODUCT_PIC】商品图片表的PRODUCT_ID一对多了。select s.*, p.*, pic.*
      from SHOPPING_CART s
     inner join PRODUCTS p on s.PRODUCT_ID = p.PRODUCT_ID
     inner join (select ID, PRODUCT_ID, SRC
                   from (select row_number() over(partition by PRODUCT_ID order by id) as rn,
                                PRODUCT_PIC.*
                           from PRODUCT_PIC)
                  where rn = 1) pic on s.PRODUCT_ID = pic.PRODUCT_ID
     where s.MEMBER_NAME = 用户账号
      

  2.   

    select s.*, p.*, pic.*
      from SHOPPING_CART s
     inner join PRODUCTS p on s.PRODUCT_ID = p.PRODUCT_ID
     inner join (select ID, PRODUCT_ID, SRC
                   from (select row_number() over(partition by PRODUCT_ID order by id) as rn,
                                PRODUCT_PIC.*
                           from PRODUCT_PIC)
                  where rn = 1) pic on s.PRODUCT_ID = pic.PRODUCT_ID
     where s.MEMBER_NAME = 用户账号 红色的部分是什么意思
      

  3.   

    “over(partition by PRODUCT_ID order by id” 意思是按PRODUCT_ID分级,再按id排序