2016-11-18 9 views
0

混乱しているタイトルは申し訳ありませんが、2つのテーブルX-ZとY-Zから値X-Yを選択するのは、YとペアになっているすべてのZについてのみです。

私は2つのテーブル - TagsTagGroupsを持っています。最初の内容は、以下のようにしている:

P1|a 
P1|b 
P1|c 
P2|a 
P2|c 

そして第二次

1|b 
1|c 
2|a 
2|c 
2|d 

文字は数字はこれらのタグのグループを表す、コンテンツのP1とP2のタグを表します。私がしたいのは、1つのグループに内容が含まれている「コンテンツ」 - 「タググループ」のペアを取得することです。すべてタグ上の表の場合、それはちょうどP1|1です - P2は1を伴わないので、bとP1とP2はdを持たないため2と一致しません。

私はそれをどのように行うことができますか?または、不可能/不可能な場合、これを達成するためにデータ構造をどのように再構築できますか?

+0

MySQLやSqliteをのバリエーションのですか?無関係のタグを削除してください – Serg

答えて

1
select  t.content 
      ,g.group_id 

from     tags  as t 

      join  taggroups as g 

      on   g.tag = 
         t.tag 

group by t.content 
      ,g.group_id 

having  count(*) = 
      (select count(*) from taggroups as g2 where g2.group_id = g.group_id)    
;    
0

これは、リレーショナル分割クエリ

CREATE TABLE `Tags` (
    `Cont` TEXT, 
    `Tag` TEXT 
); 
insert into Tags (Cont, Tag) 
values ("P1","a"),("P1","b"),("P1","c"),("P2","a"),("P2","c"); 

CREATE TABLE `TG` (
    `Grp` INTEGER, 
    `Tag` TEXT 
); 
insert into TG (Grp, Tag) 
values (1,"b"),(1,"c"),(2,"a"),(2,"c"),(2,"d"); 

Select c.Cont, g.Grp 
from 
    (select distinct Cont from Tags) c 
join 
    (select distinct Grp from TG) g 
on not exists (select 1 
       from TG g1 
       where g1.Grp=g.Grp 
        and not exists (select 1 
            from Tags c1 
            where c1.Cont=c.Cont 
             and g1.Tag=c1.Tag) 
       ); 
関連する問題