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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

5回答

4181閲覧

PostgreSQLで複数カラムを同じキーワードで検索する方法

teracat

総合スコア44

PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2018/02/08 04:50

複数カラムに対して1つのキーワードで検索を行おうとしています。
例えば「大阪」で検索したときに
都道府県カラムの大阪、市町村カラムの大阪、姓名カラムの大阪それぞれどのカラムでもいいので含んでいるレコードを出力したいです
単純にOR条件でWHERE区に条件を書くのがいいでしょうか?
それとも他に何か検討すべき方法などありましたら教えてください。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答5

0

部分一致なので、StrPos関数を使い、
orでつなぐのがいいと思いますよ。

sql

1where StrPos(都道府県,'大阪') > 0 2 or StrPos(市町村,'大阪') > 0 3 or StrPos(姓名,'大阪') > 0

投稿2018/02/15 00:38

AketiJyuuzou

総合スコア1147

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

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

0

効率を無視していいなら

SQL

1WHERE concat_ws(",",カラム1,カラム2,・・・) LIKE '%大阪%'

みたいなやり方でしょうか
concat(',', tbl.*)
みたいなやり方もできるようです

投稿2018/02/08 04:55

yambejp

総合スコア114843

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

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

sazi

2018/02/08 05:10

concat()ってnull無視してくれるのに今更乍ら気づきました。
sazi

2018/02/08 05:12

あ、だけど結合した結果でキーワードになっちゃうものは除外できないですね。
yambejp

2018/02/08 05:21

saziさん、どーもです 私はmysql派なのでpostgreについてはかじる程度しかわからないのですが postgreのconcatやconcat_wsはセパレータを指定できるような 記述があったのでいけるのかなぁ・・・と判断しました 実行環境がないのでtryアンドerrorで試してもらわないとなんとも言えません。 セパレータには当然キーワードに含まれない文字を指定する必要が あると想います
sazi

2018/02/08 05:26 編集

concat_ws()だとセパレータ付加できますね。失礼しました。 個人的には非常に有用な情報になりました。
退会済みユーザー

退会済みユーザー

2018/02/08 07:10

9.1で追加されている関数なんですね、concat_ws()って。知りませんでした。
退会済みユーザー

退会済みユーザー

2018/02/08 08:56 編集

でもこれって COLUMN1=A COLUMN2=B んで INPUT A,B がヒットするよな・・・ 机上の空論 とおもったらかいていたか他の人が・w・ NULL バイト ( \u00 ) で結合すればいいだけだが設定できるんだろうか
sazi

2018/02/08 09:05 編集

>asahina1979さん select concat_ws(chr(0), 'abcde', 2, NULL, 22) としてみたら、 ERROR: NULL文字は許されません となりました。 出力は文字列なので、当然と言えば当然すぎる結果ですね。
sazi

2018/02/08 09:09 編集

因みに、 select concat_ws(NULL, 'abcde', 2, NULL, 22) とするとエラーにはなりませんが、結果はNULLになります。
yambejp

2018/02/08 09:10

NULLバイトで結合ってプログラムではよくやりますけどSQLだと微妙ですよね 特にWHERE句で文字列として比較する場合、 どう反応するかわからないので個人的にはおすすめできないかなと (おそらく問題なくできるんでしょうけどね) いずれにしろ前方後方一致で検索する提示なのでなにかと問題はあります 全カラムを走査してあいまい検索すること自体がSQL的には あまりいい処理だとはいえませんので。
yambejp

2018/02/08 09:11

あら・・・NULLはダメですか
退会済みユーザー

退会済みユーザー

2018/02/13 10:20

だろうね。 その他入力不可バイトも無理な気がするが。 ビープ(\u07)ができたらログ出力で面白い
guest

0

完全一致であれば

SQL

1'大阪' IN (col1, col2)

が使えます。

投稿2018/02/13 09:59

takotakot

総合スコア1111

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

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

0

PostgreSQLで日本語全文検索 も使えるか試してみては?

投稿2018/02/08 05:53

Orlofsky

総合スコア16415

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

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

0

orで良いんじゃないでしょうか。
同じキーワードを何度も指定したく無いということなら、
例えば、検索キーワードに','を含まないこととして、各カラムをNullを考慮して結合すると以下のようにも記述できますが、あまりメリットは感じないですね。

SQL

1where coalesce(都道府県,'') || ',' || coalesce(市町村,'') || ',' || coalesce(姓名,'') 2 like '%' || キーワード || '%'

投稿2018/02/08 05:04

sazi

総合スコア25195

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問