0

このクエリを実行すると、投票sumは本来あるべきものの 2 倍になります (3 ではなく合計 = 6)。誰かがこれの修正を理解できますか?

SELECT sum(votes.vote) AS sum
    , my_votes.vote IS NOT NULL AS did_i_vote
    , votes.parent_id, subject
    , review_date
    , item_id
    , review_summary
    , review, full_name
    , reputation
    , profile_picture
    , accounts.acct_id
FROM votes
RIGHT JOIN items_purchased 
    on votes.parent_id=items_purchased.purchase_id 
JOIN accounts 
    ON items_purchased.purchaser_account_id=accounts.acct_id  
JOIN items 
    on items_purchased.item_id=items.folder_id
LEFT JOIN votes AS my_votes 
    ON my_votes.parent_id=items_purchased.purchase_id 
    AND my_votes.acct_id='3' 
    AND my_votes.column_name='purchase_id' 
WHERE purchase_id='2' 
    AND deleted_p!=1 and pub_priv_p!=1                                       
GROUP BY items_purchased.purchase_id

JOIN を取り除くとJOIN items on items_purchased.item_id=items.folder_id合計 = 3 になるため、JOIN と関係があると確信しています。ただし、何らかの形でそのJOINが必要です。

考え?

4

1 に答える 1

6

スキーマがないとわかりませんが、これは推測です。

すべての結合条件を確認してください。結果セットが「重複」する原因となっている条件が欠落している可能性があります。

たとえば、テーブルがある場合

`Foo` with columns `A` `B` and `C` - A and B are the PK;
`Bar` with columns `A` `B` and `Z` - A and B are the PK;
`Biz` with columns `Z` `GOAL` 

そして、 ごとの GOALS の数をカウントしたかったのAですが、 Foo to Bar に参加しただけで十分でAはない場合B、誤ったカウントが得られる可能性があります。

これを確認する最も簡単な方法は、SELECT * を実行してグループを削除することです。

于 2012-05-03T17:19:24.303 に答える