删除mysql中的重复数据

时间:2017-04-14 21:26:16

标签: mysql sql

所以我有一个连接查询产生了我想要的结果,但它也包含了我不想要的重复数据。

这是命令

SELECT cust_id, cust_fname, cust_lname, street_address, apt, city, state, zip,  h_phone, m_phone, o_phone, cu_o.order_id, order_date, s_notes, donut_id, donut_name, donut_des, donut_cost, li.donut_qty
FROM customer cu
RIGHT JOIN cust_order cu_o
ON cu.cust_id = cu_o.co_cust_id
JOIN line_item li
ON li.li_order_id = cu_o.order_id
JOIN donut 
ON li.li_donut_id = donut.donut_id
;

这是输出

SQL Output

2 个答案:

答案 0 :(得分:1)

虽然我认为这不是SQL的工作,但是我在另一个线程中学到了(遗憾的是我不记得哪一个),它确实可以通过使用参数来完成。这是一个最小且可验证的示例(with a demo here):

修改

我意识到原来的答案是错过了结果的正确排序,所以语句更复杂一些(在应用参数技巧之前,你必须先对结果集进行排序)。

drop table if exists t;
drop table if exists u;

create table t (id int, name varchar(10));
create table u (id int, tid int, val varchar(10));

insert t values (1, 'A'), (2, 'B'), (3, 'C');
insert u values (1, 1, 'x'), (2, 1, 'y'), (3, 2, 'z'), (4,2,'w'),(5,3,'q');

select x.name, x.val from (
select o.id, case when o.name <> @test then o.name else '' end as name, 
       @test:=o.name, o.val 
from (select t.id, t.name, u.val from u join t on u.tid = t.id order by t.name) o
join (select @test:='') test
) x
order by x.id

这是此示例的输出:

+-----+----+
|name | val|
+-----+----+
|A    | x  |
|     | y  |
|B    | z  |
|     | w  |
|C    | q  |
+-----+----+

答案 1 :(得分:0)

然后不要向客户展示。

完全取决于你什么会离开,不是吗? 我真的没有看到那里的问题。

这就是关系数据库工作的方式,如果你不喜欢它那么多 - 那么你可以选择退出其他数据库类型/范例。

PS而且,基本上有方法可以按照你喜欢的方式使用它。

说,做两个查询而不是一个。 或者使用GPOUP_CONCAT作为聚合函数(与GROUP BY一起使用),将每个客户的甜甜圈粘在一起。

但这些都是丑陋的没有生产力的方式。