【问题标题】:How to remove duplicate rows from the output of multiple joins of MYSQL query?如何从 MYSQL 查询的多个连接的输出中删除重复的行?
【发布时间】:2022-01-20 16:36:56
【问题描述】:

我有 3 张桌子: 客户, 购买, 产品

客户表:

Cid ClientName
1 SAM
2 JOE

采购表:

PurchaseID Cid ProductID
1 1 1
2 1 2
3 2 1

产品表:

ProductID ProductName
1 JAM
2 BREAD

在内部加入它们后,它应该如下所示: 输出:

Cid ClientName ProductID ProductName
1 SAM 1 JAM
1 SAM 2 BREAD
2 JOE 1 JAM

我尝试了以下查询:

SELECT C.Cid, C.ClientName, Pr.ProductID, Pr.ProductName
FROM Client C
JOIN Purchase Pu
ON C.Cid = Pu.Cid
JOIN Product Pr
ON Pu.ProductID = Pr.ProductID

即使我得到了所需的结果,但某些行的所有列中仍有许多重复项。 例如:

Cid ClientName ProductID ProductName
1 SAM 1 JAM
1 SAM 1 JAM

如何从结果中删除其中一个重复的行?

【问题讨论】:

  • SELECT DISTINCT ...
  • DISTINCT 不起作用。请注意,这里的每一行都是唯一的组合。
  • 某些行的所有列中有很多重复项并且这里的每一行都是唯一的组合 - 请选择其中一个。

标签: mysql join duplicates


【解决方案1】:

您可以添加 group by 以获得唯一的行。

CREATE TABLE client(
cid INT,
client_name varchar(10) );

insert into client values
(1,'SAM'),
(2,'JOE'),
(1,'SAM');

CREATE TABLE purchase (
purchase_id INT,
cid INT,
product_id int );

insert into purchase values
(1,1,1),
(2,1,2),
(3,2,1);

CREATE TABLE product  (
product_id INT,
product_name varchar(10) );

insert into product values
(1,'JAM'),
(2,'BREAD'),
(1,'JAM');


SELECT C.Cid, C.client_name, Pr.product_id, Pr.product_name
FROM client C
JOIN purchase Pu ON C.cid = Pu.cid
JOIN product Pr ON Pu.product_id = Pr.product_id
group by  C.Cid, C.client_name, Pr.product_id, Pr.product_name;

结果:

cid client_name product_id  product_name
  2    JOE         1          JAM
  1    SAM         1          JAM
  1    SAM         2          BREAD

我在演示中添加了一些重复值来区分。 Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2015-06-11
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多