0

content_id と geography_id の 2 つの列を含むテーブルがあり、複数の地域にタグ付けされた多くのコンテンツ ID があります。特定の地域にタグ付けされ、他の地域にはタグ付けされていないコンテンツ ID のみを取得するにはどうすればよいですか。

ティア、アンキット

4

4 に答える 4

2

このようなものがあなたが探しているものかもしれません:

select content_id
from the_table
group by content_id
having count(distinct geography_id) = 1
   and max(geography_id) = 126 -- this is the geography_id you are looking for

2 つの ID に対してこれを行うと、ステートメントが少し変わります。

select content_id
from the_table t1
where geography_id in (11,12)
group by content_id
having count(distinct geography_id) = 2

正確にこれら 2 つの geography_idで region_id を取得する必要がある場合は、もう少し複雑です。

select t1.content_id
from the_table t1
where t1.geography_id in (11,12)
group by t1.content_id
having count(distinct t1.geography_id) = 2
   and count(distinct t1.geography_id) = (select count(*) 
                                          from the_table t2
                                          where t2.content_id = t1.content_id)

または代替手段として:

select content_id
from the_table
where geography_id = 11
intersect
select content_id
from the_table
where geography_id = 12
minus  -- this would be intersect for any other DBMS
select content_id
from the_table
group by content_id
having count(distinct geography_id) > 2;

SQLFiddle の例: http://sqlfiddle.com/#!4/35823/7

于 2013-05-16T15:02:30.913 に答える
1

これはかなり簡単だと思います。レコードをグループ化し、(は 1 に等しい必要がcontent_IDあります )の数を数えるだけです。geography_id

SELECT  content_ID
FROM    TableName
GROUP   BY content_ID
HAVING  COUNT(DISTINCT geography_id) = 1 AND
        MAX(geography_id) = 'specific tag'
于 2013-05-16T15:02:03.783 に答える
0

繰り返さない contentId のみを意味する場合

select contentid
from mytable
group by contentid
having count(*)=1

これにより、1 つの geoghraphyId のみにマップされた contentId が返されます。

SQL フィドル

于 2013-05-16T15:07:21.953 に答える
0

@a_horse_with_no_name そうです、私の答えは間違っていました。

正解は

SELECT content_id
from TableName
where content_id in (
SELECT  content_ID
FROM    TableName
WHERE   geography_id in (11)
)
group by content_id
having count(distinct geography_id)=1
于 2013-05-16T15:04:41.863 に答える