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产品
我有一辆属于两个订单的购物车
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在这些方面有问题。