こんばんは。
こんばんは。
軽いSQL文がかけずに困っております。
どなたかご教示願います。Postgres8.3になります。
テーブル名 num
カラムはuserとidとします。
データは最下部にあるように持ちます。
a~eのユーザのうち、idが2200番台のうち、2201と2202だけをもつユーザを抽出するSQL文を望みます。
a:2200と2203が存在するので偽
b:真
c:2202が無いので偽
d:2203が存在するので偽
e:真
このようなSQLを書きました。
1.numより2201を持つuser
2.numより2202を持つuser
3.numより22~で始まる以外のuser
それぞれの等しいuserが真と思ったのですが、本来3.では22~始まるidを持たないuser としなければなりませんでした。
ここで詰まってしまい、タイムアップとなってしまいました。
どのようなSQLが望ましいでしょうか。
よろしくお願いいたします。
select * from
num as m,
(select x.user from
(select user from num where id = 2201 group by user_id) as x,
(select user from num where id = 2202 group by user_id) as y,
(select user from num where id::text not like '22%' group by user) as z
where
x.id = y.id and
x.id = z.id and
y.id = z.id) as n
where
m.id = n.id;
num
user,id
a,1000
a,1100
a,2000
a,2100
a,2200
a,2201
a,2202
a,2203
a,3000
b,1000
b,2100
b,2201
b,2202
b,3000
b,3100
c,1000
c,2201
c,2203
c,3000
c,3100
c,3200
d,1000
d,2100
d,2201
d,2202
d,2203
d,3000
d,3100
d,3200
e,1000
e,2201
e,2202
e,3000
e,3100
e,3200
e,3300
お礼
ありがとうございました。