2010-09-22 95 views
0

我有數據根據其位置獲取列表。這些位置被映射到位置圖表中。結構基本如下所示:MySQL 3表加入

listings 
    -id 
    -title 
    etc. 

locations 
    -id 
    -location_name 
    etc. 

location_map 
    -listing_id 
    -location_id 

當我想根據它們的位置列出列表時,我正在使用以下SQL。基本上,我有位置ID,然後我可以找到位於該位置的列表。我使用DISTINCT,因此我不會得到重複的位置結果。

這可行,但我想知道這是否是一個好方法,因爲我需要使用DISTINCT。有沒有更好的,更喜歡的做這種事情的方式?

SELECT DISTINCT LS.title, LS.id, LS.url, LS.description 

     FROM listings LS 

      JOIN location_map MAP ON LS.id = MAP.listing_id 
      JOIN locations LOC ON LOC.id = MAP.location_id 

     WHERE LOC.id = 123 

     ORDER BY LS.title; 
+3

你爲什麼得到重複?每個列表/位置組合中,location_map中是否有多行? – 2010-09-22 16:43:10

+0

此代碼有效(我沒有重複),我只是不確定它是否是最好的方式。 – Frank 2010-09-22 16:52:09

+1

他的意思是,如果你不使用'DISTINCT',你會得到什麼樣的模糊?從你已經顯示的數據模型中,你不應該得到愚蠢的... – JNK 2010-09-22 17:02:49

回答

0

你可以嘗試

SELECT LS.title, LS.id, LS.url, LS.description 
FROM listings LS 
WHERE 
LS.id IN (
    SELECT LM.listing_id 
    FROM location_map LM 
    WHERE LM.location_id = 123) 

這消除了加盟位置。

我不確定DISTINCT問題是什麼。如果您確定了一個位置,爲什麼會有重複?

+0

非常感謝。你的陳述是有效的,而且簡單得多。我剛纔讀到,通常最好使用子選擇語句,而不是使用DISTINCT,但我無法弄清楚。看到你的解決方案非常簡單。 – Frank 2010-09-22 22:43:38