• ベストアンサー

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

SELECTする際、特定カラムの特定文字列がある場合に、そのレコードを弾いた結果を取得したいのですが、 どうすれば良いでしょうか? ■前提 ・「urlpathカラム」に、「/tokyo/officeedit/261」みたいなパスが1つ入っています ■知りたいこと ・SELECTする際、「urlpathカラム」の中で、指定パスを含むレコードは除く、という条件を付けたいのですが、どうすれば良いでしょうか? ■弾きたいパス例 ・「/tokyo/officeedit/★★」 ・「/tokyo/houseedit/★★」 ・「/site/login」

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

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

re97
質問者

お礼

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

その他の回答 (2)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

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

re97
質問者

補足

回答ありがとうございました。 実は、よく見たら、前部分も動的に変わるパスだったので … 「/◆◆/officeedit/★★」 ・「WHERE urlpath NOT REGEXP '/officeedit/|/houseedit/' AND」 としたら目的結果は得られました。 が、折角の機会なので、参考までに教えてください。 「NOT REGEXP」と「not like」は何が異なるのでしょうか? 今回のケースで言えば、こういう書き方もありなのでしょうか? `urlpath` not like '%/officeedit/%' AND not like '%/houseedit/%'

  • t_ohta
  • ベストアンサー率38% (5251/13736)
回答No.1

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

re97
質問者

お礼

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

関連するQ&A