こんばんは。
軽い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ランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
SQL文作成のお願い
-
PostgressからMySQL(MariaDB)...
-
UNIQUEをつけたときのINDEXテー...
-
特定カラムの値を変更したいの...
-
チェックボックスから、データ...
-
SQL文の実行に苦労しています。
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
CLOB型へのINSERT
-
SQL*Loaderで、データを加工し...
-
異なるスキーマからデータを抽...
-
ORA-00959: 表領域'****'は...
-
Data Pump で大量データインポ...
-
特定のスキーマのテーブルを一...
-
INDEXの無効化
-
Access レコードを追加できませ...
-
datapumpの実行方法について
-
RDBのテーブル種類の違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
クエリアナライザのsp_helpコマ...
-
UNIQUEをつけたときのINDEXテー...
-
PostgressからMySQL(MariaDB)...
-
pl/pgsqlで変数の扱い
-
SQL SELECT文 別テーブルのレコ...
-
SQLで検索結果の記事を表示したい
-
3つのテーブルの処理について
-
PostgreSQLでの複数結果のまとめ方
-
PostgresSQL8.4でツリー上に取...
-
SQL文作成のお願い
-
賢いSQL文がわからない
-
postgreSQLの正規表現
-
テーブル作成 外部参照 配列
-
もうちょっと賢いSELECT文が書...
-
Postgresqlの自己結合について
-
2つの異なるテーブルを和結合し...
-
全テーブルのデータの行数
-
チェックボックスから、データ...
おすすめ情報