CREATE TABLE Cart (
Id_cart INT NOT NULL,
Id_product VARCHAR(25)
);
CREATE TABLE product (
id_product VARCHAR(25),
id_vendor INT NOT NULL
);
CREATE TABLE Orders (
Id INT,
Id_cart INT NOT NULL,
status VARCHAR(25),
order_no VARCHAR(25),
id_vendor INT NOT NULL
);
-- data
INSERT INTO Cart
(Id_cart, id_product)
VALUES
(1, 'abc002'),
(1, 'abc003')
;
INSERT INTO product
(id_product, id_vendor)
VALUES
('abc002',2),
('abc003',3)
;
INSERT INTO Orders
(Id, Id_cart,status,order_no,id_vendor)
VALUES
(1, 1, 'pending','aaa001',2),
(2, 1, 'pending','aaa002',3)
这是我用于显示输出的 sql 查询
Select c.id_cart,order_no,id_product from orders as o
left join (SELECT * FROM cart) c using(id_cart) where id_product = 'abc002'
//
//output
id_cart order_no id_product
1 aaa001 abc002
1 aaa002 abc002
//
//expected output
id_cart order_no id_product
1 aaa001 abc002
我希望它只显示属于 id_product (abc0002) 的 order_no,而不是显示 id_product(abc0002) 具有相同 id_cart 的所有 order_no。
我该怎么做?我的查询有什么问题吗?谢谢。
最佳答案
噢。欧维。我的骨头。
首先,出于对事物的热爱,请保持它有点干净,查询中有太多错误,它伤害了我的眼睛。我什至不确定你想要实现什么真相。据我所知,您没有正确使用左连接。你也没有PK,这可以让事情变得更容易。我也不确定此声明中购物车的用途是什么。
尝试以下方法,如果您正在寻找的话,请查看它的工作原理和原因:
SELECT o.id_cart, o.order_no, p.id_product FROM orders o
LEFT JOIN product p ON o.id_vendor = p.id_vendor
LEFT JOIN cart c ON p.id_product = c.id_product
WHERE p.id_product = 'abc002'
关于mysql - 根据产品过滤时输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48697069/