質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

386閲覧

PostgreSQLの検索クエリについて~のみ含んだデータを取得する方法が知りたい

kazu5674

総合スコア7

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/07/08 04:46

編集2021/07/08 05:05

Postgresのクエリーについて。

以下のようなデータがあります。

iduser_idcode
110aaa1
210bbb1
311aaa2
411bbb2
512aaa3
612bbb3
712ccc3
813aaa4
914aaa5
1014zzz1

codeに対し、"aaa"と"zzz"のみ含んだuser_idを取得したい場合、
どのような検索クエリとなるでしょうか。

理想としては、上の表からuser_id:14が取得したいといった意図となります。

また、ネットで調べたりして試したクエリーは以下の通りです。

PostgreSQL

1SELECT 2 a.user_id 3FROM 4 table AS a 5WHERE 6 (a.code LIKE '%aaa%' OR a.code LIKE '%zzz%') 7 AND NOT EXISTS( 8 SELECT 9 * 10 FROM 11 table as b 12 WHERE 13 b.id = a.id 14 AND b.code NOT LIKE '%aaa%' 15 AND b.code NOT LIKE '%zzz%' 16 ) 17GROUP BY 18 a.user_id

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/07/08 04:51

試しに書いてみたコードなどはありますか?
m.ts10806

2021/07/08 04:55

テーブル定義とサンプルデータをSQLで提示してください。 また、自身が試したこと調べたことも記載してください。
退会済みユーザー

退会済みユーザー

2021/07/08 05:25

サブクエリーなしに出そうな気がするけど、どういう結果がほしいんだろうか?
kazu5674

2021/07/08 07:06

返信が遅れてすみません、また初期段階で必要な情報が足りておらずすみません。 次回からの質問時に参考にさせて頂きます。
guest

回答2

0

codeに対し、"aaa"と"zzz"のみ含んだuser_id

codeの内容に、"aaa"もしくは"zzz"を含んだものが、共に存在するuser_id

SQL

1SELECT user_id 2from tbl a 3where exists( 4 select 1 from tbl where code LIKE '%aaa%' and user_id =a.user_id 5 ) 6 and exists( 7 select 1 from tbl where code LIKE '%zzz%' and user_id =a.user_id 8 ) 9group by user_id

投稿2021/07/08 05:58

編集2021/07/08 05:59
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazu5674

2021/07/08 07:05

ありがとうございます!参考にさせて頂きました!
guest

0

ベストアンサー

「"aaa"と"zzz"のみ含んだuser_id」の解釈が微妙ですが、「aaa を含む code と zzz を含む code の両方を持ち、それ以外の code (bbb や ccc など) を持たない user_id」ということなら、こんな感じでしょうか。

sql

1create table "table" (id int primary key, user_id int, code text); 2 3insert into "table" values (1, 10, 'aaa1'); 4insert into "table" values (2, 10, 'bbb1'); 5insert into "table" values (3, 11, 'aaa2'); 6insert into "table" values (4, 11, 'bbb2'); 7insert into "table" values (5, 12, 'aaa3'); 8insert into "table" values (6, 12, 'bbb3'); 9insert into "table" values (7, 12, 'ccc3'); 10insert into "table" values (8, 13, 'aaa4'); 11insert into "table" values (9, 14, 'aaa5'); 12insert into "table" values (10, 14, 'zzz1'); 13 14insert into "table" values (11, 15, 'aaa6'); 15insert into "table" values (12, 15, 'bbb6'); 16insert into "table" values (13, 15, 'zzz6');

sql

1select distinct user_id 2from "table" 3where user_id in (select user_id from "table" where code like '%aaa%') 4 and user_id in (select user_id from "table" where code like '%zzz%') 5 and user_id not in (select user_id from "table" where code not like '%aaa%' and code not like '%zzz%');

なお、aaazzz があるとそれも引っかかりますね…。

sql

1insert into "table" values (14, 16, 'aaazzz');

追記。intersect と except でもいけますね。

sql

1(select user_id from "table" where code like '%aaa%' 2 intersect 3 select user_id from "table" where code like '%zzz%') 4except 5select user_id from "table" where code not like '%aaa%' and code not like '%zzz%';

投稿2021/07/08 05:54

編集2021/07/08 06:23
hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazu5674

2021/07/08 07:04

ありがとうございます!参考にさせて頂き、無事解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問