1

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

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=Paul(一般是采购员)和 5=compny1(一般是卖家) 注意:产品 id 1=苹果,产品 id 2=梨,产品 3=浆果,产品 id4 =橙色

选择记录 MatchType=Price 和 cust ID=3 后,请求表如下所示:

 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 必须是 = 卖家产品 id 以将请求的产品与可用的产品匹配,并且在这种情况下选择的 customerId 是 3...

我不明白为什么最后 4 条记录会自我重复?为什么会这样??
从技术上讲,应该只显示 4 条记录。即行上的记录.. 1,2 和 3

建议/观察 好的,看过这个之后......你认为这些行是重复的,因为同一客户两次以不同的数量请求了 productID1=apple 吗?

  requestid |   cid   |   productid   | Quantity | Price  | matchtype
        ------------------------------------------------------------------
    1          3            1            3.0     2.00        price

    7          3            1            10.0    7.00        price  
4

2 回答 2

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 过滤使用内部联接,对于从一个表中过滤使用 were 子句 ..(理论在一条腿上)...

- - 编辑 - -

此查询可以显示请求之间的差异...

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
于 2013-02-17T22:37:05.387 回答
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并投入了一些虚拟数据。如果我正确设置了数据,代码就可以工作。

于 2013-02-17T23:19:23.587 回答