mysql - 正确加入两个表作为一对多关系
问题描述:
我知道这个问题已经在这里问了很多次,但毕竟我找不到我想要的答案。mysql - 正确加入两个表作为一对多关系
我的问题是:
我有两个表,这些表的结构为:
表1: 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
我试图加入的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
但这只返回一行。
答
您的查询缺少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 BY
指示聚集为每个item_id
分贝。
+0
谢谢你这一个解决了我的问题。这是你对我的欠债,你给我的问题的解决方案的重要时间 –
+0
很高兴我能帮上忙! –
mysql不等于SQL-server – Jens
谢谢你改进我的错误 –
为什么你在这里使用正确的连接?为什么不是左连接?当您使用正确的连接时,即使table1中的行不存在,您也将获得所有评论。这可能是好的,但大多数人认为是另一个方向。你想要所有的项目和他们的评论(如果存在)。你有这种编码的方式,你不会得到一个项目,如果它没有审查返回。 –