プロが教えるわが家の防犯対策術!

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

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

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

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

A 回答 (3件)

likeの方は、それぞれにカラム名も必要ですよ。


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

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

お礼日時:2013/02/10 13:43

前方一致なら `column_name` not like '/tokyo/%'


複数有るなら、どれにもマッチしない条件となるので、否定条件どうしを and で繋ぐ

この回答への補足

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

実は、よく見たら、前部分も動的に変わるパスだったので … 「/◆◆/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
    • good
    • 0

NOT演算子を使用するといいでしょう。


where not (urlpath = '/site/login')
といった感じです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/05 18:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!