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 =梨、製品ID 3 =ベリー、製品ID4 =オレンジ

レコードMatchType=PriceおよびcustID= 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は、要求された製品を利用可能な製品と一致させるために=セラーの製品IDである必要があり、この場合に選択されたcustomerIdは3...です。

最後の4つのレコードがなぜそれらを自分で繰り返すのかわかりませんか?なんでこれなの?
技術的に言えば、4つのレコードのみを表示する必要があります。つまり、行のレコード.. 1、2、および3

提案/観察OKay、これを見た後... productID1 = appleが同じ顧客から異なる数量で2回要求されたため、行が繰り返されていると思いますか?

  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

ここで間違いがないことを願っています(ここでは遅いです)が、それが主なアイデアです。2 つのテーブルに存在する列の場合、フィルタリングに使用する内部結合を使用したい場合、1 つのテーブルからフィルタリングする場合は、were 句を使用します .. (1 つの脚の理論) ...

- - 編集 - -

このクエリは、リクエスト間の差異を表示できます...

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 に答える