这是我的样本数据
-- 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。我有一个属于两个订单的购物车
在显示期间,输出应为
order_no | product_id
order1 | A
order1 | B
order2 | C
order2 | D
现在我的问题是每个product_id都会循环每个order_no。我怎么能克服这个?
答案 0 :(得分:1)
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
答案 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;