仅显示重复列值的第一个

时间:2016-04-18 02:04:17

标签: php mysql database

如何查询以删除下面的视图?

+-------------------+------------+
| Order_id          |   Weight   |
| 20                |          4 | 
| 21                |          5 | 
| 22                |          2 | 
| 22                |          2 |
+-------------------+------------+

是这样的:

+-------------------+------------+
| Order_id          |   Weight   |
| 20                |          4 | 
| 21                |          5 | 
| 22                |          2 | 
| 22                |            |
+-------------------+------------+

显示结果但未输入数据库时​​。

3 个答案:

答案 0 :(得分:0)

好的,这是怎么做的:

SELECT
   Order_id,
   Weight,
   if(@order_id = Order_id, '', Weight) as no_dup_weight,
   @order_id := Order_id as dummy
FROM      Table1
ORDER BY  Order_id asc;

您基本上需要检查以前的Order_id是否与当前相同,如果是,则输出一个空字段。

这是SQLFiddle demonstrating the solution

答案 1 :(得分:0)

你真的需要2排骰子吗?你不能按照http://www.mysqltutorial.org/mysql-distinct.aspx

使用DISTINCT子句

或者知道什么有重复是很重要的。在这种情况下,您应该查看GROUP BY子句

答案 2 :(得分:0)

一个简单的方法是:

select DISTINCT order_id, weight from xyz
UNION
select order_id, null from xyz
group by order_id, weight
having count(*) > 1
Order by weight desc;

第一个select语句将显示所有唯一值,第二个将仅检索重复值。

在您需要的输出表中,您似乎希望显示所有非重复行和重复行的第1列值,但不显示第2列值。上面的查询将允许您这样做。