如何写sql把相同字段的行保留第一行?

数据库表里查询商品(item), 要求同一个产品(product)下的商品,只能返回一个商品, 但同一个产品下一般会有多个商品, 应该怎么写?

商品(item),会有一个表明是哪个产品(product)的字段product_id.

例子,比如item_id为2,3,4的商品的product_id为1, item_id为1,5的商品的product_id为2, item_id为6的商品的product_id为3

我应该怎么写SQL,才能只返回item_id为1,2,6的这3个商品

怎么修改下面这个SQL:

SELECT * FROM item WHERE item_id IN (1,2,3,4,5,6) 
阅读 3.7k
3 个回答
  SELECT 
    min(item_id) item_id,
    product_id
  FROM item
  WHERE item_id IN (1,2,3,4,5,6)
  GROUP BY product_id ;

你并没有说是取所有item_id中最小的(取值示例一般理解为随机示例),所以前面兄台直接用了item_id,当然默认是按大小顺序取的,不过你的sql_mode应该是严格限制group by用法的,所以不加min会报错,前面加上min就可以了,没必要使用子查询

SELECT item_id,product_id FROM item WHERE item_id IN (1,2,3,4,5,6) GROUP BY product_id ;

解决了:

SELECT * FROM item WHERE item_id IN (SELECT min(item_id) FROM item WHERE stock>0 GROUP BY product_id)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题