2013-06-20 88 views
-3

如果這看起來很簡單,我很抱歉,因爲我的任務需要在2小時內通過,而且我沒有足夠的時間做一些進一步的研究,因爲我有另一個未完成的任務今晚提交。我只知道基本的MYSQL命令,而不是這些類型。這是最後一個沒有回答的問題之一,即使我已經閱讀了JOIN文檔,也會讓我瘋狂。請幫忙。MySQL查詢4個不同的表格

說我有4個表

_______________  _______________  _______________ _______________ 
| customers | |  orders | | ordered_items | | products | 
|_______________| |_______________| |_______________| |_______________| 
|(pk)customer_id| | (pk)order_id | | (pk)id  | |(pk)product_id | 
| first_name | |(fk)customer_id| | (fk)order_id | |  name  | 
| last_name | |  date  | |(fk)product_id | | description | 
| contact_no | |    | | quantity | |  price  | 
|_______________| |_______________| |_______________| |_______________|  

我怎麼能夠查詢所有訂購的產品(如:CUSTOMER_ID =「5」)

我只知道喜歡直截了當查詢基本的SQL在一張桌子上,並從兩個不同的加入,但由於其4個不同的表格彼此具有不同的關係,我將如何能夠獲得由特定客戶ID訂購的所有產品?

因爲它喜歡從order_id =(* order by customer_id = 5)獲得所有訂購產品的產品。

但什麼可以優化的,並在做這種類型的查詢的最佳實踐方式

+3

你看過'JOIN's嗎? –

+0

@DaneHillard ..是的,但目前,我只能清楚地理解和創建2-3個不同表格的查詢,但我還沒有學習這種類型的場景。我不是專家,仍然從大學讀書。 - 也很難讓某人以學生的觀點問一個真正的問題。我無法在一天內解決這個問題,即時通訊只是一個新的問題。 – GitKidd

+2

@GitKidd:本論壇旨在幫助那些在提出問題之前盡職盡責的人。這個問題是相當基礎的,很難假定你實際上已經嘗試了一些東西,除非你實際提出了一些合理的代碼。 – PinnyM

回答

1

你只需要加入3個表 - ordersorder_items,並products

SELECT DISTINCT products.* 
FROM products 
JOIN order_items USING (product_id) 
JOIN orders USING (order_id) 
WHERE orders.customer_id = 35 

正如許多人所提到的,你可以通過了解表格JOINS來幫助你。將2個表連接到4個或更多表之間的語法沒有太大區別。

SQLFiddle是強烈推薦的用於練習和分享您的疑問的資源。

+0

@MarkBannister .. up,這正是我想要的:) – GitKidd

+0

非常感謝。我可能不熟悉DISTINCT和USING語法,因爲我之前在使用JOINS和查詢中包含的其他語法的查詢中並未使用它們,但現在我已經瞭解瞭如何實現這些示例代碼我想要的結果..非常感謝。 – GitKidd

+0

@GitKidd:'USING'用於自然連接,其中關聯表中的相應列具有相同的名稱。更傳統的方法是使用'ON table1.some_column = table2.other_column',即使在列名不相同的情況下也可以工作。 – PinnyM

1

這是一條評論,因爲您似乎對SQL很陌生。你需要學習基本的查詢語法(這就是爲什麼你會得到低估)。

但你也問了一下表格。數據結構實際上佈置得很好。我有兩個意見。首先,你應該對你如何命名id列保持一致。對於Ordered_Items,該ID應爲ordered_item_id

其次,您應該避免對列名稱和表名使用SQL特殊字。而不是date,請使用OrderDate

+0

謝謝先生。感謝您的建議,並感謝您的評論。 - 我只是把(日期)和(ID),因爲我真的沒時間指定表的全部屬性。想爲不使用最佳做法而道歉。 :) – GitKidd