2014-12-07 93 views
1

我有三個表,我希望從表中選擇而不產生重複。Mysql - 從多個表中選擇而不產生重複的數據

表如下:

客戶

id  |  name |  lastName 
--------------------------------------- 
1  | john |  doe 
2  | helen |  keller  

訂單

的用戶ID列是一個外鍵引用李四,所以約翰訂單3項。

id  | userID |  order 
--------------------------------------- 
1  | 1  |  pizza 
2  | 1  |  pasta 
3  | 1  |  lasagna  

CustomerRating

的用戶ID列是一個外鍵引用李四,所以約翰·葉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 

我已經試過加入這些表,但由於約翰已經離開5條的評論,只下令3次,ID,姓名,姓氏和訂單列被填充了重複數據。

謝謝!

+0

可能重複的最後一個(http://stackoverflow.com/questions/6066197/selecting -across-multiple-tables-with-union) – worldofjr 2014-12-07 08:03:53

+0

發佈你想要的結果 – Yang 2014-12-07 08:19:34

+0

@worldofjr聯合查詢需要具有相同的列數,所以對我來說不起作用。 – hmzfier 2014-12-07 08:58:47

回答

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 .....

+0

儘管此鏈接可能回答此問題,但最好在此處包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – 2014-12-07 07:35:48

+0

@MisterDood我同意,將嘗試糾正它 – Vinay 2014-12-07 07:44:59

0

我認爲您需要將OrderID字段添加到CustomerRating表中,否則無法將項目與其評分相關聯。

+0

謝謝,但我不想將一個項目與其評級相關聯。 – hmzfier 2014-12-07 09:40:10

1

有許多方法可以丟棄重複項(SELECT DISTINCT,UNION,GROUP BY),但不清楚用戶是更新現有評分還是創建新評分。你希望看到什麼:最後一個等級或平均一個

另一方面說明 - 我會改變你的整個設置:

  • order表將包含order_idcustomer_id等訂單相關的東西一樣order_date

  • products表會描述你的每一個菜餚,像他們的價格信息,描述等

  • order_products表的字段order_idprduct_id

  • 如果用戶速率產品,那麼你的等級表至少需要product_idcustomer_idrate_value。我也想補充ratingDate這樣,你可以得到的平均值或選擇[跨多個表的選擇與UNION]的Max(ratingDate)