SQL:コメントを含む投稿をすべて入手する

mysql sql
SQL:コメントを含む投稿をすべて入手する

かなり単純なSQLを作成する必要があると思いますが、最近DBで作業することはめったにありませんが、詳細を理解することはできません。

次の列を含むテーブル ‘posts’があります。

_
id、キャプション、テキスト
_

次の列を持つテーブル ‘comments’:

_
id、名前、テキスト、post_id
_

‘post_id’キーを通してそれに関連した1つ以上のコメントを持つすべての投稿のキャプションを取得する(単一の)SQLステートメントはどのように見えるでしょうか? SQLクエリと関連性がある場合、DBMSはMySQLです。

  1  0


ベストアンサー

p.caption、count(c.id)を投稿から選択p p.id = c.post_idグループのコメントcにcount(c.id)> 0のp.captionをつける

7


SELECT DISTINCT p.caption、p.id投稿pから、コメントc WHERE c.post_ID = p.ID

結合を使用する方が、IN句や副問合せを使用するよりもはるかに高速になると思います。

2


投稿からのキャプションの選択内部結合コメントON comments.post_id = posts.id GROUP BY posts.id;

having句やcount()は必要ありません。

edit:jishiのおかげで、もちろんコメントになるべきではない(コメントが孤立した場合のnullを避けるため)。

0


投稿の選択DISTINCTキャプション投稿コメントへの投稿posts.id = comments.post_id

カウントとサブクエリを忘れる。

内部結合は、有効な投稿があるすべてのコメントをピックアップし、0のコメントがあるすべての投稿を除外します。 DISTINCTは、複数のコメントがある投稿の重複したキャプションエントリを結合します。

0


この状況では、この構文が最も読みやすいと思います。

SELECT * FROM投稿P WHERE EXISTS(SELECT * FROMコメントWHERE post_id = P.id)

それはこのスレッドの他のほとんどの人よりあなたの意図をより良く表しています – “私に全ての投稿をくれ…​”(投稿から*を選択) “…​ コメントがある場合 “(存在する場合(コメントから*を選択…​) ))。 これは基本的に上記の結合と同じですが、実際には結合を行っていないので、Postのレコードの重複を取得することを心配する必要はありません。したがって、1つのpostにつき1レコードを取得します。

0


ここから頭の中を離れて行きますが、おそらく次のようになります。

投稿からの選択キャプションWHERE id IN(選択投稿からのSELECT post_idカウントcount(*)> 0)

-1


あなたは基本的に副問い合わせを実行するのを見ています –

SELECT p.caption FROM投稿p WHERE(SELECT COUNT(*)FROMコメントc WHERE c.post_id = p.id)> 1;

これはpostsテーブルの各行に対して SELECT COUNT(*)`サブクエリを実行する効果があります。 テーブルの大きさによっては、単純にできるように、対応する `comments`の数を格納するために comments`テーブルに `comment_count`という列を追加することを検討するかもしれません。

SELECT p.caption FROM投稿p WHERE comment_count> 1

-2


タイトルとURLをコピーしました