查询重复记录问题

时间:2018-01-10 07:52:01

标签: mysql sql

这是我的样本数据

-- schema
CREATE TABLE Cart (
    Id_cart INT NOT NULL,
    Id_product VARCHAR(25)
);

CREATE TABLE Orders (
    Id INT,
    Id_cart INT NOT NULL,
    Id_vendor INT NOT NULL,
    status VARCHAR(25),
  order_no VARCHAR(25)
);

-- data
INSERT INTO Cart
    (Id_cart, Id_product)
VALUES

    (1, 'abc002'),
    (1, 'abc003')
;
INSERT INTO Orders
    (Id, Id_cart,Id_vendor,status,order_no)
VALUES
    (1, 1,1, 'pending','aaa001'),
    (2, 1,2, 'pending','aaa002')
;

我使用此查询来显示记录。

Select c.id_cart,order_no,id_product from cart as c
left join  (SELECT id_cart,status,order_no FROM orders) o using(id_cart)

我得到的结果

id_cart     order_no    id_product
1           aaa002      abc002
1           aaa001      abc002
1           aaa002      abc003
1           aaa001      abc003

我预期的结果

id_cart     order_no    id_product
1           aaa001      abc002
1           aaa002      abc003

我的查询有什么问题?如何消除重复记录?

假设我在orders表中添加了一列vendor_id。每个order_no属于一个供应商,id_cart属于许多供应商。当我试图显示我的产品时,我想显示order_no和我的id_product。

E.g。我有一个属于两个订单的购物车

  1. 订单属于供应商A(1),由产品A和B组成。
  2. 订单属于供应商B(2),由产品C和D组成。
  3. 在显示期间,输出应为

    order_no | product_id
    order1   | A
    order1   | B
    order2   | C
    order2   | D
    

    现在我的问题是每个product_id都会循环每个order_no。我怎么能克服这个?

2 个答案:

答案 0 :(得分:1)

简单地将GROUP BY添加到您的sql Query

SELECT c.id_cart,order_no,id_product FROM cart AS c
left join  (SELECT id_cart,status,order_no FROM orders) o using(id_cart) GROUP BY o.order_no

示例: - http://sqlfiddle.com/#!9/b6b118/6/0

答案 1 :(得分:1)

您想要显示购物车产品及其订单。购物车包含来自不同供应商的产品,其中存在单独的订单。因此,将产品表加入购物车以了解供应商,然后才加入订单表。

select
  id_cart,
  o.order_no,
  id_product 
from cart c
join product p using (id_product)
join orders o using (id_cart, id_vendor);

如果您还想购买尚未订购订单的购物车产品,请将订单加入外部联接。

更新:当您在'from子句'中报告“未知列'id_vendor'时出现问题”,这里是带有ON子句的查询:

select
  c.id_cart,
  o.order_no,
  c.id_product 
from cart c
join product p on p.id_product = c.id_product
join orders o on o.id_cart = c.id_cart and o.id_vendor = p.id_vendor;