mysql - 根据产品过滤时输出不正确

标签 mysql sql

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/

相关文章:

mysql - 在 MySQL 中订购发票号码和字母

C# SQL 导出格式

mysql - MATCH() AGAINST() 不匹配第二个字符串 - MySQL

mysql - 多对多关系中每组最大的 n

php - 在 CakePHP 中插入计算机生成的输出

MySQL 查询减法值

sql - 在表上实现语句级触发器时,是否可以获取所有受影响行的 OLD 和 NEW 记录?

mysql - 如何正确修改现有列以从设定数字自动递增

MySQL 查询 ORDER BY DateTime 问题

mysql - 有没有办法删除mysql中列数据末尾的空格