隐藏MySQL查询中的重复结果

时间:2017-03-08 19:39:25

标签: mysql

我有一个查询,其中我对结果进行分组: SELECT brand, description, prodcode FROM table GROUP BY brand, prodcode 现在的结果是:

brand | description | prodcode
------------------------------
Brand1, Description1, Product1
Brand1, Description2, Product2
Brand1, Description3, Product4

我希望看到的是:

brand | description | prodcode
------------------------------
Brand1, Description1, Product1
        Description2, Product2
        Description3, Product4

如何在将重复数据发送到应用程序层之前如何抑制这些重复数据?

2 个答案:

答案 0 :(得分:1)

总有办法。问题是"我们应该这样做"。请注意,您可以隐藏品牌数据。如果数据被重新排序,排序,则分拣机失去了知道哪个品牌是哪一行的能力。如果这只是一个打印报告,不能使用或预期用户无法操作数据,那么确定..但如果是这样,用户可以转储到excel并稍后操作...更好地拥有所有数据。

我个人觉得这些信息显示在电子数据上令人讨厌,但在打印表格或静态报告上都没问题。原因是:在电子设备上我可以导入excel排序和播放数据;但如果列是"缺少"冗余数据然后电子操作变得有问题。

Working SQLfiddle

CREATE Table foo (
 brand varchar(20),
 description varchar(20),
 prodcode varchar(20));


Insert into foo values ('Brand1', 'Description1', 'Product1'),
('Brand1', 'Description2', 'Product2'),
('Brand1', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand1', 'Description3', 'Product3');

QUERY:

SELECT case when@var <> f.brand then @Var :=brand end as Brand
     , f.description
     , f.prodcode
FROM (SELECT * FROM foo ORDER BY brand, description, prodcode) f
CROSS JOIN  (SELECT @var := '') b

结果:

Brand   description     prodcode
Brand1  Description1    Product1
(null)  Description2    Product2
(null)  Description3    Product3
(null)  Description3    Product4
Brand2  Description3    Product4
(null)  Description3    Product4

为什么会这样:

魔术发生在交叉连接和案例评估中。

有1张桌子。我们在加入之前对记录进行排序。我们正在创建一个名为@var的用户变量并将其设置为&#39;&#39;在表foo的第一条记录中。然后我们将@var分配给第一条记录的品牌。当SQL交叉连接到第二个提交时@var现在是第一个记录的品牌。如果品牌匹配,则不会显示任何记录,如果品牌不匹配,我们会更改@var的值并显示新值。

风险:

  • 如果发生其他表连接,或者表中的顺序不符合要求,我们首先需要在&#34; foo&#34;上执行子查询。按品牌订购
  • 申请任何涉及brand1的订单现在毫无价值
  • 它不可重复使用。另一个可能想要利用数据(视图)的模块不再能够这样做,因为品牌已隐藏在某些记录上。

答案 1 :(得分:0)

您可能需要考虑在品牌列上使用SELECT DISTINCT来仅返回不同的值。有关更多信息:https://www.w3schools.com/sql/sql_distinct.asp。但是,在“SQL”中,“品牌”列折叠为只有一行但仍然与“描述”和“prodcode”中的其他三行相关联。