Mysql 不同的行 2 列

  • 本文关键字:Mysql mysql
  • 更新时间 :
  • 英文 :


我有一个查询:

SELECT p.productid, p.dupproductid
FROM products p, categories c
WHERE c.catid = p.catid && (c.parent IN(2257) || p.catid = 2257)
GROUP BY p.productid

这将返回:

productid dupproductid
23423     0
54345     0
34234     33333
23423     33333
45345     0
34324     11111
46546     0

除了 0 之外,我只想获得唯一的 dupproductid,所以我不能使用 GROUP BY

我希望它回来

productid dupproductid
23423     0
54345     0
34234     33333
45345     0
34324     11111
46546     0

如果你想删除最小ID,那么这将为你工作 -

SELECT p.productid, p.dupproductid
FROM (SELECT p.productid
,p.dupproductid
,ROW_NUMBER() OVER(PARTITION BY dupproductid ORDER BY productid DESC) as RN
FROM products p, categories c
WHERE c.catid = p.catid && (c.parent IN(2257) || p.catid = 2257)
) T
WHERE T.productid = 0 
OR RN = 1

Sql 小提琴为您 - http://www.sqlfiddle.com/#!18/db18b/2

你能不做一个"选择独特"还是这对你没有帮助?如果不是,你能确切地说出您希望您的表格显示什么吗?我很困惑你是否仍然希望显示返回"0"的行?你能给我更多的信息吗?

只需使用最小聚合函数,因为您将结果集保留为 0

SELECT p.productid, min(p.dupproductid) as dupproductid
FROM products p, categories c
WHERE c.catid = p.catid && (c.parent IN(2257) || p.catid = 2257)
GROUP BY p.productid

最新更新