3

我试图弄清楚如何使用 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)与表格过滤器中的阅读器匹配。

查询有效,但我得到了重复,所以我在某处遗漏了一个关键点?

4

3 回答 3

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

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-03-12T09:50:25.707 回答
1
SELECT post.title
FROM post
JOIN filter USING (postid)
WHERE filter.reader ='2'
LIMIT 10

您加入的条件是filter.reader = '2',这相当于在WHERE子句中包含它。这意味着您正在执行所有post filter行的交叉连接(交叉产品),然后在 上过滤这些结果filter = '2',这将导致许多帖子的帖子 ID 不匹配。您需要添加 Post 和 Filter postid 匹配的附加条件。

于 2013-03-12T09:54:56.393 回答
1

你也可以这样做

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

希望这可以帮助

于 2013-03-12T09:57:34.057 回答