1
SELECT posts.id AS post_id, categories.id AS category_id, title, contents, posts.date_posted, categories.name, comments.id AS comment_id
FROM posts
LEFT JOIN (categories, comments) ON categories.id = posts.cat_id AND posts.id = comments.post_id
WHERE posts.id = 28

この SQL クエリで、コメントがあるものだけでなく、すべての投稿を選択するようにしたいのですが、現時点では、このクエリはコメントもある行を返します。

4

3 に答える 3

0
Select * From Posts P
Left Join Comments C on P.post_id = C.post_id
Join Categories CG CG.id = P.cat_id
于 2013-04-27T23:44:05.337 に答える
0

これを試してください:

SELECT 
    posts.id AS post_id,
    categories.id AS category_id, 
    title, contents, 
    posts.date_posted, 
    categories.name, 
    comments.id AS comment_id
FROM posts p, categories c, comments co
LEFT JOIN (categories, comments) ON categories.id = posts.cat_id AND posts.id = comments.post_id
WHERE p.cat_id = c.id 
and (co.post_id is null or co.post_id = p.id)
and posts.id = 28
于 2013-04-27T23:37:19.530 に答える
0

これはどういう意味だと思いますか。

LEFT JOIN (categories, comments) 
ON     categories.id = posts.cat_id 
       AND posts.id = comments.post_id

ドキュメントは、カンマ区切りのテーブル リストがクロス結合と同等であることを示唆しています。

LEFT JOIN 
        (
        categories
        cross join
        comments
        )
ON      categories.id = posts.cat_id 
        and comments.post_id = posts.id;

これにより、すべての投稿が返されることに注意してください。両方ともカテゴリなし、コメントなし、または両方なしです。しかし、コメントが存在しない場合、これはカテゴリを抑制し、その逆も同様です。SQL Fiddle の例を参照してください。

これを記述するより良い方法は、独自の結合でカテゴリとコメントを探すことです。

LEFT JOIN 
        categories
ON      categories.id = posts.cat_id 
LEFT JOIN
        comments
ON      comments.post_id = posts.id

コメントなしの投稿のみが必要な場合は、排他的を使用しますleft join:

LEFT JOIN
        comments
ON      comments.post_id = posts.id
...
WHERE   comments.id is null
于 2013-04-27T23:53:09.230 に答える