こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SELECT、特定カラムの文字列があるレコード弾く

SELECTする際、特定カラムの特定文字列がある場合に、そのレコードを弾いた結果を取得したいのですが、
どうすれば良いでしょうか?

■前提
・「urlpathカラム」に、「/tokyo/officeedit/261」みたいなパスが1つ入っています

■知りたいこと
・SELECTする際、「urlpathカラム」の中で、指定パスを含むレコードは除く、という条件を付けたいのですが、どうすれば良いでしょうか?

■弾きたいパス例
・「/tokyo/officeedit/★★」
・「/tokyo/houseedit/★★」
・「/site/login」

投稿日時 - 2013-02-05 10:21:32

QNo.7929009

暇なときに回答ください

質問者が選んだベストアンサー

likeの方は、それぞれにカラム名も必要ですよ。
(`urlpath` not like '%/officeedit/%') and (`urlpath` not like '%/houseedit/%')
括弧は省略出来るけど、between の and とは違うので。
regexp は正規表現なので、検索が遅くなることが多いようです。like も前方一致でないなら、indexは使われないので、やはり、速くはならない。よって、どっちがいいかはデータ量や複雑なパターンマッチが必要かどうか(likeは単純文字列マッチなので)によるのでは。

投稿日時 - 2013-02-07 09:23:54

お礼

回答ありがとうございました。
大変参考になりましたー

投稿日時 - 2013-02-10 13:43:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

前方一致なら `column_name` not like '/tokyo/%'
複数有るなら、どれにもマッチしない条件となるので、否定条件どうしを and で繋ぐ

投稿日時 - 2013-02-05 17:16:01

補足

回答ありがとうございました。

実は、よく見たら、前部分も動的に変わるパスだったので … 「/◆◆/officeedit/★★」
・「WHERE urlpath NOT REGEXP '/officeedit/|/houseedit/' AND」
としたら目的結果は得られました。

が、折角の機会なので、参考までに教えてください。

「NOT REGEXP」と「not like」は何が異なるのでしょうか?
今回のケースで言えば、こういう書き方もありなのでしょうか?

`urlpath` not like '%/officeedit/%' AND not like '%/houseedit/%'

投稿日時 - 2013-02-05 18:28:35

ANo.1

NOT演算子を使用するといいでしょう。
where not (urlpath = '/site/login')
といった感じです。

投稿日時 - 2013-02-05 10:27:48

お礼

回答ありがとうございましたー

投稿日時 - 2013-02-05 18:16:09

あなたにオススメの質問