我正在努力想要与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)与表格过滤器中的阅读器匹配。
查询有效但我得到重复,所以我在某个地方错过了一个关键点?
答案 0 :(得分: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
要进一步了解联接,请访问以下链接:
答案 1 :(得分: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匹配的附加条件。
答案 2 :(得分:1)
您也可以这样做
"select post.*,filter.* from post, filter where filter.postID=post.postID and filter.reader='2' limit 0,10"
希望这有帮助