2016-08-03 16 views
0

この質問は既にここで何度も尋ねられていますが、結局のところ私の答えは見つけられませんでした。mysql - 2つのテーブルを1つの関係から複数の関係に結びつける

、私の質問は:

私は2つのテーブルを持っており、これらのテーブルの構造はようである:

TABLE1: item_id, store,title,available,shipping

表2: item_id, review_rate,user_id,review_title

これらのテーブルは、one to manyの関係として結合する必要があります。例えば

は、これらの表のデータは、ある場合:

table1: 

item_id  store  title available shipping 
------------------------------------------------------- 
11   glasses .......................... 
12   dresses .......................... 
. 
. 
. 

table2: 

item_id  review_rate user_id review_title 
-------------------------------------------------- 
11   3    10023  good item 
11   5    10024  nice item 
12   1    10024  nice one 
. 
. 
. 

、結果は接合後のようにすべきである:

afterJoin: 

item_id store title available shipping rate people_reviewed 
----------------------------------------------------------------------- 
11  .................................... 4  2 
12  .................................... 1  1 

I参加しようとしたqueryの通りである:

CREATE OR REPLACE VIEW afterJoin AS 
SELECT i.*,round(AVG(r.review_rate)) as rate,count(r.user_id) as people_reviewed 
    FROM table1 i 
    RIGHT JOIN table2 r ON i.item_id = r.item_id 

しかし、これは1行だけを返します。

+0

mysqlはSQLサーバと同等ではありません – Jens

+0

私の間違いを改善していただきありがとうございます –

+1

なぜここに正しく参加していますか?なぜ、左に参加しないのですか?右結合を使用すると、table1の行が存在しない場合でもすべてのレビューを取得します。それはおそらく大丈夫ですが、ほとんどの人が他の方向を考える。あなたはすべてのアイテムとそのレビュー(存在する場合)が必要です。あなたがこのコードを持っている方法では、レビューがない場合に返されるアイテムを取得しません。 –

答えて

2

クエリにはGROUP BY句がありません。それがなければ、データベースはすべてのレコードを集約しています。

SELECT i.*, round(AVG(r.review_rate)) as rate, count(r.user_id) as people_reviewed 
FROM table1 i 
    RIGHT JOIN table2 r ON i.item_id = r.item_id 
GROUP BY i.item_id 

GROUP BYitem_idため凝集するDBを指示します。

+0

この1つは私の質問を解決してくれてありがとう。これは私の質問の解決のためにあなたの重要な時間を与える私にあなたの義務です –

+0

私は助けることができてうれしい! –

関連する問題