所以我有一个连接查询产生了我想要的结果,但它也包含了我不想要的重复数据。
这是命令
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
;
这是输出
答案 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
一起使用),将每个客户的甜甜圈粘在一起。
但这些都是丑陋的没有生产力的方式。