3

JOINを使用する方法を見つけようとしていますが、どこかで行き詰まっています。

私は2つのテーブルを持っています:

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.*,filter.* from post, filter where filter.postID=post.postID  and filter.reader='2' limit 0,10"

お役に立てれば

于 2013-03-12T09:57:34.057 に答える
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 に答える