こんばんは。
軽い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
No.4ベストアンサー
- 回答日時:
提示されたデータ以外に例えば次のようなデータがあった場合、user=f、gが検索される必要があると言うことでいいですか?
insert into "num" values
('f',1100)
,('f',2100)
,('f',2300)
,('g',2300)
;
(1)
-- idの値が、2200台では2201と2202しか持たないuserを得る
select x."user"
from "num" as x
inner join
(select "user"
from "num"
where "id" between 2200 and 2299
group by "user"
having count("id")=2) as y
on x."user"=y."user" and x."id" in(2201,2202)
group by x."user"
;
(2)
-- idの値が、2200台を持たないuserを得る
(select "user"
from "num"
group by "user"
)
except
(select "user"
from "num"
where "id" between 2200 and 2299
group by "user"
)
;
(3)
-- 二つのクエリをunionで繋ぐ
-- idの値が、2200台では2201と2202しか持たないuserを得る
select x."user"
from "num" as x
inner join
(select "user"
from "num"
where "id" between 2200 and 2299
group by "user"
having count("id")=2) as y
on x."user"=y."user" and x."id" in(2201,2202)
group by x."user"
union
(
-- idの値が、2200台を持たないuserを得る
(select "user"
from "num"
group by "user"
)
except
(select "user"
from "num"
where "id" between 2200 and 2299
group by "user"
)
)
;
(2)のクエリで得た結果を(1)にunionで繋ぐため、()が増えていることに注意してください。
若干説明がたりていませんでしたが2201と2202は必須なためfとgは検索されません。
こちらのSQL参考にさせていただきます。ありがとうございました。
No.3
- 回答日時:
すみません。
No2の回答は無視してください
ごめんなさい
No.2
- 回答日時:
私、勘違いしてましたね(^^ゞ
下記のSQLでどうでしょう?
(Microsoft Accessで確認したためPostgresでは構文が違うかもしれません)
SELECT tableA.user
FROM (
SELECT user
FROM num
WHERE id like '22*'
GROUP BY user
HAVING count(user) = 2
) as tableA,
(
SELECT tableB.user
FROM
(
SELECT user
FROM num
WHERE id like '22*'
GROUP BY user
HAVING count(user) = 2
) as tableB
INNER JOIN num as tableBB
ON tableB.user = tableBB.user
WHERE tableBB.id like '22*'
AND (tableBB.id <> 2201 and tableBB.id <> 2202)
) as tableBBB
WHERE tableA.user <> tableBBB.user
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルからのselectにおいて...
-
postgreSQLのint型は桁数指定が...
-
pl/pgsqlで変数の扱い
-
賢いSQL文がわからない
-
クエリアナライザのsp_helpコマ...
-
UNIQUEをつけたときのINDEXテー...
-
SQL文の実行に苦労しています。
-
2つの異なるテーブルを和結合し...
-
INDEXの無効化
-
異なるスキーマからデータを抽...
-
データを削除しても表領域の使...
-
ORA-00959: 表領域'****'は...
-
datapumpの実行方法について
-
SQLでスキーマ名(所有者名)の...
-
INSERT時に発番を行いたい
-
[性能改善]AccessのDBに大量の...
-
oracle sqlで先頭の1件を取得
-
count(1)とcount(*)の違い
-
Access レコードを追加できませ...
-
特定のスキーマのテーブルを一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
PostgressからMySQL(MariaDB)...
-
UNIQUEをつけたときのINDEXテー...
-
クエリアナライザのsp_helpコマ...
-
SQL SELECT文 別テーブルのレコ...
-
SQL文作成のお願い
-
3つのテーブルの処理について
-
全テーブルのデータの行数
-
SQLで検索結果の記事を表示したい
-
近い時間によるテーブル結合
-
PostgresSQL8.4でツリー上に取...
-
SELECT結果から重複行を除く方法
-
Perl DBI でSELECT ilikeの結果...
-
2つの異なるテーブルを和結合し...
-
賢いSQL文がわからない
-
チェックボックスから、データ...
-
Viewにインデックスは張れ...
-
データを削除しても表領域の使...
-
異なるスキーマからデータを抽...
おすすめ情報