2013-03-12 62 views
3

我試圖找出與JOIN一起工作,但是我卡在某處。MySQL - 與許多關係的INNER JOIN查詢

我有兩個表:

Post (postid,title) with values (1,'a'), (2,'b'),(3,'c'),(4,'d'),... 
Filter (postid,reader) values (1,3),(1,2),(1,6),(1,10),(2,1),... 

而且我想這個查詢:

SELECT post.title 
FROM post 
INNER JOIN filter ON filter.reader ='2' 
LIMIT 0 , 10 

我想什麼都從表後的標題其中ID(在本例中2)與表格過濾器中的讀者匹配。

該查詢的工作原理,但我得到重複,所以我錯過了某個關鍵點?

+1

爲SQL問題是一個很好的做法增加http://sqlfiddle.com/;) – 2013-03-12 09:53:09

回答

6

您得到多個結果的原因是因爲您的查詢從兩個表中產生笛卡爾積,因爲您沒有指定應該如何連接表。

SELECT post.title 
FROM post 
     INNER JOIN filter 
      ON filter.postID = post.postID // tells how are tables be joined 
WHERE filter.reader = '2' 
LIMIT 0 , 10 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

+0

感謝您的回答! – 2013-03-12 10:25:51

+0

不客氣:D – 2013-03-12 10:46:17

1
SELECT post.title 
FROM post 
JOIN filter USING (postid) 
WHERE filter.reader ='2' 
LIMIT 10 

你被加入,但條件是filter.reader = '2',這相當於使它在WHERE條款中。這意味着您正在執行所有postfilter行的交叉連接(跨產品),然後在filter = '2'上過濾這些結果,這將導致許多帖子的帖子ID不匹配。您需要添加Post和Filter postids匹配的附加條件。

+0

感謝您的回答! – 2013-03-12 10:26:21

1

你也可以像下面這樣做

"select post.*,filter.* from post, filter where filter.postID=post.postID and filter.reader='2' limit 0,10" 

希望這有助於

+0

謝謝我可以稍後再試! – 2013-03-12 10:27:02