Mysql 查询时出现重复记录问题

Mysql 查询时出现重复记录问题,mysql,sql,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

这是我的样本数据

-- 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\u id。每个订单号属于一个供应商,一个id车将属于多个供应商。当我试图显示我的产品时,我想显示订单号和我的id产品

我有一辆属于两个订单的购物车

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

    order_no | product_id
    order1   | A
    order1   | B
    order2   | C
    order2   | D
    
    现在我的问题是,每个订单号都将针对每个产品id进行循环。我如何克服这一问题?

    Simple add to your sql查询 示例:-

    简单添加到sql查询
    示例:-

    您希望显示购物车产品及其订单。购物车包含来自不同供应商的产品,这些供应商有单独的订单。因此,将产品表加入购物车,以便了解供应商,然后才加入订单表

    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\u vendor'存在问题时,以下是关于子句的查询:

    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;
    

    您希望显示购物车产品及其订单。购物车包含来自不同供应商的产品,这些供应商有单独的订单。因此,将产品表加入购物车,以便了解供应商,然后才加入订单表

    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\u vendor'存在问题时,以下是关于子句的查询:

    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;
    


    没有重复记录。1 | aaa002 | abc002与1 | aaa002 | abc003不同,您可以清楚地看到。您要查找的是每个id\u购物车和订单号的聚合。所有记录的id\u购物车都是相同的。
    id\u购物车
    显示在两个表中。更好的设计是,
    购物车
    订单
    表通过连接表连接,连接表将购物车与订单关联起来。我认为,
    订单
    本身不应该知道任何关于购物车的信息。购物车和给定状态的订单之间有什么区别?假设一辆购物车包含许多产品,并且每个产品都属于其供应商。在购买过程中,我会将购物车产品分为不同的订单。订单将链接到购物车和供应商,在这里我可以知道哪个产品属于哪个订单号。没有重复记录。1 | aaa002 | abc002与1 | aaa002 | abc003不同,您可以清楚地看到。您要查找的是每个id\u购物车和订单号的聚合。所有记录的id\u购物车都是相同的。
    id\u购物车
    显示在两个表中。更好的设计是,
    购物车
    订单
    表通过连接表连接,连接表将购物车与订单关联起来。我认为,
    订单
    本身不应该知道任何关于购物车的信息。购物车和给定状态的订单之间有什么区别?假设一辆购物车包含许多产品,并且每个产品都属于其供应商。在购买过程中,我会将购物车产品分为不同的订单。订单将链接到购物车和供应商,在这里我可以知道哪些产品属于哪个订单号。我已经进一步解释了我实际需要什么。我根本不喜欢这个答案。它仍然使用不必要的子查询(而不是简单地使用
    左连接顺序o
    ),但最重要的是:根据SQL标准,这是一个无效的查询。MySQL允许这种情况发生,并根据
    订单号返回任意挑选的
    id\u购物车
    id\u产品
    。这些甚至不必来自同一个记录-DBMS可以自由选择任何购物车和任何与订单链接的产品。我建议您删除此答案,或者将其替换为详细说明问题并包含从同一记录返回id\u cart和id\u product的查询的答案。我已经进一步解释了我实际需要的内容。我根本不喜欢此答案。它仍然使用不必要的子查询(而不是简单地使用
    左连接顺序o
    ),但最重要的是:根据SQL标准,这是一个无效的查询。MySQL允许这种情况发生,并根据
    订单号返回任意挑选的
    id\u购物车
    id\u产品
    。这些甚至不必来自同一个记录-DBMS可以自由选择任何购物车和任何与订单链接的产品。我建议您删除此答案或将其替换为详细说明问题的答案,并包含从同一记录返回id_cart和id_product的查询。它在“from子句”中显示错误未知列“id_vendor”,但订单和产品中存在id_vendor!?好的,我将更新我的答案,并将
    USING
    子句替换为
    ON
    子句。也许MySQL有这些问题。它在“from子句”中显示错误未知列“id\u vendor”,但id\u vendor存在于订单和产品中!?好的,我将更新我的答案,并将
    USING
    子句替换为
    ON
    子句。也许MySQL在这些方面有问题。