我正在运行查询,我得到重复的行。我不明白为什么会这样。这是我的查询:
SELECT c.FName,
p.ProductName,
s.Description,
s.Quantity,
s.Price
FROM customers c,
products p,
sellers s,
requests r
WHERE c.ID = s.CID
AND p.ProductID = s.ProductID
AND r.ProductID = s.ProductID
AND r.C_ID = 3
AND r.MatchType = 'Price'
ORDER BY s.Price ASC
=======编辑=======
好的,这里是对Requests表中的值的编辑。注意:CID 2 = DAZ(通常是卖家),3 =保罗(一般是购买人)和5 = compny1(通常是卖家) 注意:产品ID 1 =苹果,产品ID 2 =梨,产品3 =浆果,产品ID4 =橙色
在选择记录MatchType = Price和cust ID = 3之后,Request表如下所示:
requestid | cid | productid | Quantity | Price | matchtype
------------------------------------------------------------------
1 3 1 3.0 2.00 price
3 3 4 4.0 2.50 price
4 3 3 2.5 2.00 exact
5 3 2 3.0 3.50 exact
6 3 3 3.0 2.00 exact
7 3 1 10.0 7.00 price
这是卖家表
promotionID | cid | productid | Quantity | Price | description
------------------------------------------------------------------
1 2 4 5.0 2.99 oranges
2 2 3 1.5 1.00 hand strawberries
3 2 3 2.5 2.00 l stawberries
4 2 2 3.0 3.00 pear
5 5 1 5.0 5.00 royal apples fm appleco.
6 2 1 6.0 5.50 sweet apples
在运行查询之后,我已经尝试了所建议的加入和本问题中的一个我保持这个输出
FName ProductName Description Quantity Price
daz Oranges Fresh and sweet oranges. 5.0 2.99
compny1 Apple royal apples fm appleco. 5.0 5.00
compny1 Apple royal apples fm appleco. 5.0 5.00
daz Apple sweet apples 6.0 5.50
daz Apple sweet apples 6.0 5.50
我不知道为什么我要收到重复的行。请求的产品ID必须是= sellers产品ID才能将所请求的产品与可用产品相匹配,并且在这种情况下选择的customerId为3 ...
我不明白为什么最后4条记录重复它们自己?为什么会这样呢? 从技术上讲,应该只显示4条记录。即行上的记录.. 1,2和3
SUGGESTION /观察 好的,看过这个之后......你认为行是重复的,因为同一个客户已经用不同的数量请求了productID1 = apple ???
requestid | cid | productid | Quantity | Price | matchtype
------------------------------------------------------------------
1 3 1 3.0 2.00 price
7 3 1 10.0 7.00 price
答案 0 :(得分:1)
您需要使用内部联接来“过滤”行。 试试这个:
select c.FName, p.ProductName, s.Description, s.Quantity, s.Price
FROM requests r
inner join sellers s on r.ProductID = s.ProductID
inner join products p on p.ProductID=s.ProductID
inner join customers c on c.ID=s.CID
where r.C_ID = 3 AND r.MatchType='Price'
ORDER BY s.Price ASC
希望我在这里没有任何错误(在这里已经很晚了),但它的主要思想。 对于存在于两个表中的列,并且您希望使用for过滤使用内部联接, 从一个表中过滤使用are子句..(单腿理论)......
---编辑----
此查询可以显示请求之间的差异......
select c.FName, p.ProductName, s.Description, s.Quantity, s.Price, r.demandid as 'Request ID'
FROM requests r
inner join sellers s on r.ProductID = s.ProductID
inner join products p on p.ProductID=s.ProductID
inner join customers c on c.ID=s.CID
where r.C_ID = 3 AND r.MatchType='Price'
ORDER BY r.demandid s.Price ASC
答案 1 :(得分:0)
select c.FName, p.Name, s.Description, s.Quantity, s.Price
FROM customers c
left join sellers s on c.ID = s.cid
left join requests r on r.ProductID = s.ProductID
left join products p on p.productid = s.productid
where r.C_ID = 1
AND r.MatchType='Price'
ORDER BY s.Price ASC
我为它设置了一个小提琴SQL Fiddle并输入了一些虚拟数据。如果我正确设置了数据,代码就可以工作。