我有三个表,我想从表中选择而不产生重复。
表格如下:
客户
id | name | lastName
---------------------------------------
1 | john | doe
2 | helen | keller
订单
userID列是引用John Doe的外键,因此John订购了3个项目。
id | userID | order
---------------------------------------
1 | 1 | pizza
2 | 1 | pasta
3 | 1 | lasagna
CustomerRating
userID列是引用John Doe的外键,因此John留下5条评论。
id | userID | rating | comment
-------------------------------------------------
1 | 1 | 5/5 | was good
2 | 1 | 5/5 | excellent
3 | 1 | 4/5 | great
4 | 1 | 4/5 | great
5 | 1 | 4/5 | great
我如何从3个表中选择哪里可以获得如下所示的返回结果?
id | name | lastName | order | rating
-----------------------------------------------------------------
1 | john | doe | pasta | 5/5
| | | pizza | 5/5
| | | lasagna | 4/5
| | | | 4/5
| | | | 4/5
我已尝试加入这些表格,但由于John已经留下5条评论并且只订购了3次,因此id,name,lastName和order列会填充重复的数据。
谢谢!
答案 0 :(得分:1)
我没有任何MySQL经验,但我认为它与MSSQL类似。
因此无法使用您期望输出的格式。您可以将订单和评级列值以逗号分隔
Here是一个类似的问题,可以帮助你
包括基于链接的示例 试试这样的事情
SELECT Customers.id, Customers.name, Customers.lastName,
GROUP_CONCAT(Orders.order) OrderedDishes,
GROUP_CONCAT(CustomerRating.rating) RatingsGiven
FROM
..... rest of your query .....
答案 1 :(得分:1)
有多种方法可以放弃重复项(SELECT DISTINCT
,UNION
,GROUP BY
),但目前尚不清楚用户是更新现有评级还是创建新评级。你想看到的是:最后一个评级还是平均评分
另一方面 - 我会改变你的整个设置:
order
表格包含order_id
,customer_id
和其他与订单相关的内容,例如order_date
products
表格,描述您的每道菜以及价格,描述等信息
order_products
表格,其中包含字段order_id
和prduct_id
如果用户评价产品,那么您的评分表至少需要product_id
,customer_id
,rate_value
。我还要添加ratingDate
这样您就可以获得平均值,或者按Max(ratingDate)
答案 2 :(得分:0)
我认为您需要在CustomerRating表中添加orderID字段,否则无法将项目与其评级相关联。