查询时出现重复记录问题

3phpmpom  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(382)

这是我的样本数据

-- 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产品。
e、 我有一辆属于两个订单的手推车
订单属于供应商a(1),由产品a和b组成。
订单属于供应商b(2),由产品c和d组成。
在显示过程中,输出应

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

现在我的问题是每一个订单号都会针对每一个产品id进行循环。我如何克服这个问题?

0s0u357o

0s0u357o1#

简单地将分组依据添加到sql查询中

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号

carvr3hs

carvr3hs2#

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

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子句”中的“unknown column'id\u 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;

相关问题