如何查询擦除下面的视图?
+-------------------+------------+
| Order_id | Weight |
| 20 | 4 |
| 21 | 5 |
| 22 | 2 |
| 22 | 2 |
+-------------------+------------+
像这样:
+-------------------+------------+
| Order_id | Weight |
| 20 | 4 |
| 21 | 5 |
| 22 | 2 |
| 22 | |
+-------------------+------------+
显示结果但未输入数据库时。
一个简单的方法是:
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语句将显示所有唯一的值,第二个语句将仅检索重复的值。
在所需的输出表中,似乎要显示所有非重复行和重复行的第一列值,而不是第二列值。上面的查询将允许您执行此操作。
好吧,下面是如何做到的:
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演示解决方案。
您真的需要2行的重复数据吗?你不能按照http://www.mysqltutorial.org/mysql-distinct.aspx
还是重要的是要知道什么有重复。在这种情况下,您应该查看GROUP BY子句