2

私は3つのテーブルを持っています。

news:
id
title

categories:    
id
name

newsEachCategories:
postId
categoryId

テーブルnewsEachCategoriesは、各投稿のIDと投稿されたカテゴリのIDを保持します。

したがって、ID 13の投稿がカテゴリ6と7に投稿されている場合、1つは「postId13、categoryId 6」、もう1つは「postId13、categoryId7」の2つのエントリがあります。

したがって、カテゴリ(たとえば、IDが5のカテゴリ)にあるすべての投稿を検索するには、次を使用します。

SELECT news.title , news.editedTitle , news.id
FROM news JOIN newsEachCategories
ON news.id = newsEachCategories.postId
WHERE  newsEachCategories.categoryId = 5

カテゴリ5と6の両方の投稿を選択する場合、クエリをどのように構文化する必要がありますか?

4

1 に答える 1

4

両方のカテゴリに存在する結果のみを返すには、COUNT()集計を使用してHAVING、2つの結果が返されることを句で確認できます。

COUNT()このソリューションでは、 perを返すサブクエリに参加し、postId両方のカテゴリにあるものに制限します。これをメインテーブルに結合して、その特定のに必要な残りの列を取得しますnews.id

SELECT 
  news.title,
  news.editedTitle,
  news.id
FROM
  news
  /* Join against subquery to count occurrences in newsEachCategories */
  JOIN (
    SELECT postId, COUNT(DISTINCT categoryId) AS postcount 
    FROM newsEachCategories 
    /* Limit to categories 5 & 6 */
    WHERE categoryId IN (5, 6)
    GROUP BY postId
    /* Ensures a result was returned for each category 5, 6 */
    HAVING postcount = 2
  ) postCounts ON news.id = postCounts.postId
于 2012-12-22T19:15:40.770 に答える