2013-09-01 71 views
1

我期待着類似的問題,但我沒有找到正確的語法。用MySQL連接四個表並從兩個表中獲取值

我有這些表:

行情 - quotes_id - AUTHOR_ID - quote_ENG

作者 - AUTHOR_ID - 作者

TopicMap - topicmap_id - topics_ENG

QuotesByTopic - quotes_id - topicmap_id

我需要從錶行情,從表作者的作者「WHERE 'topic_ENG'= '年齡' 得到 'quote_ENG'。

我能夠得到 'quote_ENG' 值...:

SELECT quote_ENG 
FROM Quotes, TopicMap, QuotesByTopic 
WHERE TopicMap.topics_ENG='age' 
    and QuotesByTopic.topicmap_id = TopicMap.topicmap_id 
    and QuotesByTopic.quotes_id = Quotes.quotes_id 

...但我錯過了最後一段也得到了 '作者' 值:

​​

謝謝你的任何幫助

+4

顯式'JOIN'語法是你的朋友。 – Kermit

+0

您正在使用超過20年過時的JOIN語法,[本文](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using -old-style-joins.aspx)突出了許多原因來切換到新的ANSI 92 JOIN語法 – GarethD

回答

3

試試這個:

SELECT 
    q.quote_ENG, 
    a.author 
FROM QuotesByTopic AS qt 
INNER JOIN TopicMap AS t ON qt.topicmap_id = t.topicmap_id 
INNER JOIN Quotes AS q ON qt.quotes_id = q.quotes_id 
INNER JOIN Authors AS a ON a.author_id = q.author_id 
WHERE t.topics_ENG = 'age' 
+0

我試圖使用它,但不幸的是它似乎不起作用。它不會給我一個錯誤,因爲它永不停止加載。這就像它被限制在一個無限循環中 –

+0

@fabrizio_ff - 它與你所做的一樣,但語法不同,它應該工作正常,你可能需要使用'LEFT JOIN'來代替。它在那之後工作得很好,還是永不止步? –

+0

它可以工作,但需要幾分鐘才能得到結果。它可能取決於數據庫的大小?這些表格包括:作者(17.400條記錄),行情(70.000條記錄),QuotesByTopic(70.000條記錄),TopicMap(100條記錄)。 –

0

編輯:你改變了你的問題,因爲我正在打字...我仍然使用一個獨特的事情,你想做類似tma.topics_ENG IN('年齡','性別')。正如其他人顯示我會使用顯式連接。包括你自己在內的每個人都可以更輕鬆地閱讀和理解。

SELECT DISTINCT 
     ath.author, 
     qts.quote_ENG 
FROM quotes qts 
INNER JOIN Authors ath 
    ON qts.author_id = ath.author_id 
INNER JOIN QuotesByTopic qbt 
    ON qts.quote_id = qbt.quote_id 
INNER JOIN TopicMap tma 
    ON qbt.topicmap_id = tma.topicmap_id 
WHERE tma.topics_ENG = 'age'; 
相關問題