• ベストアンサー

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% (5097/13326)
回答No.1

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

re97
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • accessで複数カラムの組み合わせ文字列をselect

    エクセルVBAからaccessにクエリを送る際のselectクエリの書き方について教えてください。 VBAから指定する文字列strが、accessのカラムa,b,cのハイフン区切りの文字列と一致した場合のみselectしたいのですが、select文はどのように書けばよいでしょうか? (VBAでstrをハイフンなしにばらさない場合) ------------------- str='0-1-2' ↓ select * from aaa where カラムa=0 and カラムb=1 and カラムc=2 ↓ 「and」なしで書く場合は? -------------------

  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブルで一番古いレコードだけをSELECTしたい

    テーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ■背景 ・テーブルからデータを取得しようと思ったら、「id」及び「autoincrement」に該当するカラムがありませんでした ・日付に該当するカラムもありません ・「phpMyAdmin」で確認すると、いつも同じ並び順で表示されるので、格納したレコード順で表示されているのではないかと思いました ■質問 ・この時、そのテーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ・where?

    • ベストアンサー
    • MySQL
  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • レコード内容からテーブル特定

    Oracleのデータ更新について質問させてください。 SQL文で、ある文字列を含むレコードデータを持つ、テーブルおよびレコード名を知る方法はありますでしょうか? 具体的には、DBに登録されている"google.co.jp"という文字列を"yahoo.co.jp"という文字列に全てupdateしたいのですが、 "google.co.jp"という文字列は複数のテーブルの不特定のレコードに格納されています。 全てのテーブルを1つ1つselectで見ていくしか方法は無いのでしょうか?

  • bashスクリプトでの文字列から特定文字列の位置特定

    bashスクリプトで 文字列から特定の文字の位置を取得する場合 expr index 文字列 特定したい文字 のように書きますが、aaa_atestという文字列から "atest"という文字列の開始位置を取得する ことはできません 何か方法はないのでしょうか

  • 文字列取得

    '/path1/path2/file1.txt' '/path1/path2/path3/file2.txt' 上記のようなpathがあった場合にファイル名(拡張子なし)の 文字列を取得したいのですがどのように良いでしょうか? 宜しくお願い致します。 awkで$4と指定すれば「file1.txt」の文字列を取得できるのですが パスの長さが定まっていないため$4ではなく最後の文字と指定する 記号はないでしょうか? echo /path1/path2/file1.txt |awk '{FS="/"; print $4}'

  • Excelで列の中から特定の文字を含むレコードだけを抽出したい

    Excelで列の中から特定の文字を含むレコードだけを抽出したい場合どうすればよいでしょうか? 例えば A レベルスイッチ ロータリスイッチ コネクタ 押しボタンスイッチ センサ の列から「スイッチ」という文字が含まれるレコードを注したい場合どうしますか?

  • 一番新しいdatetime型列があるレコードを取得

    下記条件を満たすSQL文を知りたいのですが、どう書けばよいでしょうか? ■構成 Aテーブル ・「id」カラム ・「created_at」カラム … datetime型 ・「area」カラム Bテーブル ・「a_id」カラム ・「created_at」カラム … datetime型 ■前提 ・Aテーブルの1レコード(「id」カラム)に対して、0~複数のBテーブルレコード(「a_idカラム」)がある ・A.id = B.a_id ■欲しい内容 ・「Aテーブル」「Bテーブル」それぞれのカラム内容全部。※条件あり ▼条件1 Aテーブル「id」カラムに対応したBテーブルの「a_id」が複数ある場合には、該当Aテーブル内容+ Bテーブル「created_at」カラムの値が一番新しいレコードを返す(取得レコード数は常に1) ▼条件2 Aテーブル「id」カラムに対応したBテーブルの「a_id」がなかった場合には、該当Aテーブル内容+ Bテーブル側は何も返さない ▼条件3 ※同名カラムを取得する際には、カラム名先頭にそれぞれa、bを付与(「acreated_at」「bcreated_at」) ・後で、それぞれのテーブルカラムとして利用したいだけなので、それが出来れば形式にこだわりはありません

    • ベストアンサー
    • MySQL
  • 【初心者】特定の文字に色をつけたい

    初歩的な質問で恐縮ですが教えてください。 MySQLで、あるレコードのあるカラム(1000レコードのうち、20レコードくらいで、20のカラムはばらばら)の文字だけ指定して色をつけて出力したいのです。 この場合、MySQLのデータに何か書き込むのでしょうか。 それとも、出力の際に工夫するのでしょうか。 何卒よろしくお願いいたします。

    • ベストアンサー
    • MySQL