2

私は3つのテーブルを持っており、それらを再開しています:

    :::NEWS:::
ID  |  TITLE 
 1  |  New A  
 2  |  New B  

:::TAGTONEW:::
NEWID |  TAGID
  1   |  1 
  1   |  2
  2   |  2
  2   |  3 

:::TAGS:::
ID  |  TAG
 1  |  religion 
 2  |  sport
 3  |  politic

そして、これの目的は、指定されたタグのリストに一致するニュースを検索することです (たとえば、スポーツと宗教のタグを持つニュース)。Ok。問題は、私が次のようなことをするときです:

SELECT * FROM news JOIN tagtonew ON news.id = newid JOIN tags ON tagid = tags.id
WHERE tag IN ('religion','sport');

結果は 3 行になり、そのうち 2 行でNew A. わかりました、GROUP BY news.id1 行だけを取得するために使用できますが、問題は、New A に一致するすべてのタグを返す必要があることです (New A がスポーツと宗教に関連していることを返す必要があります)。newid を要求していますか? 前もって感謝します。

編集

上記の結果は次のようになります。

New A - religion
New A - sport
New B - sport

私がグループ化すると、次のようになります。

New A - religion
New B - sport

しかし、JSON で返す必要があるため、A もスポーツに関連していることを知る必要があります。したがって、出力を次のようにする必要があります。

New A - (religion, sport)
New B - sport
4

1 に答える 1

2

GROUP BYandHAVING句を使用するだけです。

SELECT  a.Title
FROM    news a
        INNER JOIN tagtonew b
            ON a.id = b.newid 
        INNER JOIN tags c 
            ON b.tagid = c.id
WHERE   c.tag IN ('religion','sport')
GROUP BY a.Title
HAVING COUNT(*) = 2

更新 1

使用するGROUP_CONCAT

SELECT  a.MovieName, '(' || GROUP_CONCAT(b.CategoryName) || ')' AS List
FROM    MovieList a
        INNER JOIN CategoryList b
            ON a.ID = b.MovieID
WHERE   b.CategoryName IN ('Comedy','Romance')
GROUP BY a.MovieName
于 2012-11-18T23:45:36.470 に答える