重复行Sql查询

时间:2013-02-17 22:22:43

标签: mysql sql records

我正在运行查询,我得到重复的行。我不明白为什么会这样。这是我的查询:

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  

2 个答案:

答案 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并输入了一些虚拟数据。如果我正确设置了数据,代码就可以工作。