2012-11-01 38 views
-1

我對我產生了哪些汽車4個表:SQL - 如何獲取鏈接數據?

  • 用戶
  • 挑戰
  • 練習
  • Challenge_Exercise

一個用戶可能有很多的挑戰,以及一個挑戰將有很多練習。

我注意到Challenge表有一個對它的父User(稱爲user_id)的引用,但是Exercise沒有在它的表中對Challenge進行引用;他們的關係作爲Challenge_id和exercise_id存儲在Challenge_Exercise中。

我的問題是,我將如何取出鏈接到特定用戶的每個練習?例如用戶id = 1?

+0

Google for JOIN – Laurence

+0

@Laurence,我已經這樣做了,但我不明白這些例子。沒有與我的問題類似的例子。 –

回答

0
SELECT * 
FROM excerise, 
     challenge_excerise, 
     challenge 
WHERE challenge.user_id = 1 
     AND challenge_excerise.challenge_id = challenge.id 
     AND challenge_excerise.exercise_id = excercise.id 

我在做什麼這裏是一個join,你也可以明確地inner joins(谷歌,如果你想知道更多)做到這一點。

由於您有many to many關係,這意味着每個挑戰可以有多個練習,但每個練習都可能有多個挑戰,因此需要此表。這是制定額外表格的標準,因此您沒有冗餘數據,該表格通常稱爲junction table

如果你想要背景只是谷歌它,這個主題有大量的數據。

+1

請看看ANSI風格的連接,它們更容易閱讀!值得一讀:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx – Bridge

+0

我知道這些連接,這些我的意思與「明確做到」。就我個人而言,我不覺得他們更容易閱讀。 –