• 締切済み

where句のlikeと=の違いについて

Postgresバージョン7.1.1からバージョン7.4.6にしたところ困ったことがあります。 テーブル名: hoge カラム名: col (←varchar(12)) データの中身はまるっきり同じ物が入っています。 という環境です。 そこで、SQLを実行するとバージョンによって結果が異なり不可解なのです。何か分かることがありましたら返事をお願いします。 [実行したSQL] select col from hoge where col = 'コル' select col from hoge where col like 'コル' [7.1.1] 共に、答えは一つだけ'コル'が表示されます。 [7.4.6] likeの時は'コル'が一つだけ表示されます。 =の時は何十個か出てきます。 以上、宜しくお願い致します。

みんなの回答

noname#20623
noname#20623
回答No.1

私の不勉強だったら申し訳ないですが、 Likeって「%」とかと対で使うのでは有りませんでしたっけ? あいう あう いあいう ってのがあったとして、'%あい'だと あいう が対象になって '%あい%'だと あいう いあいう が抜き出されるって言う・・・

agharta
質問者

お礼

おそらく、PostgreSQLのバージョンをアップしたせいか なおりました。お騒がせしました。

agharta
質問者

補足

回答ありがとうございます。 '%あい'の場合、'うあい'が引っかかると思います。 また、like文の場合カラムcolがインデックス化されても、シーケンシャルに検索かける様に思います。 そうすると、なぜイコールで同じ結果が帰ってこないのかやはり疑問です

関連するQ&A

  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • SQL(Where句)

    商品を登録するテーブル(商品テーブル)があって 構造が 商品主コード varchar(5) 商品補助コード varchar(2) 商品名 varchar(10) です。 商品主コードと商品補助コードを一つにして「商品コード」として使用しています。(ex:12345-00) 検索の際、商品コードをインプットボックスに「12345-00」と入力してその商品名を取得したいのですが、上手くいきません。 どなたかお願いします! 現在のSQLは Select 商品名 From 商品テーブル Where 商品主コード || '-' || 商品補助コード Like '%入力された商品コード%' です。

  • LIKEを使用したレコード抽出について

    OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1  COL2 -------------- ABC==  12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC==';   ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。

  • mysqlでLIKEで検索について

    KEYIDでKから始まるものを探そうと思っていますが、1件しか表示されず困っております。 ********************************** KEYID(カラム名) K1001 K1002 K1003 select * from テーブル名 Where KEYID LIKE 'K%' [実行結果] K1001 **********************************

    • ベストアンサー
    • MySQL
  • InformixのSQL文Where句で

    マイナーなRDBS(?)なので回答をいただけるか不安ですが… InformixのSQL文(単純なSELECT文)で、以下のような 文の場合、検索条件はどのような解釈になるのでしょうか? select  count(*) from  テーブル名 where  カラム名 = ? です。 要は「?」が何を示すのかが分からないのです。 matches(Oracleでいうlike)の場合、Oracleの%が*に、 _(アンダースコア)が?になるらしいのですが、 = で完全一致で繋いださいにどうなるのかが分かりません。 ちょっとした情報でもよいので、ご教授お願い致します。

  • count関数の値をwhere句で使用する方法について

    宜しくお願い致します。 例えば、下記の様にデータを検索します。 select column1,count(column2) as column2_num from hoge_table group by column2_num すると、検索結果にはcolumn1のそのままの値と、column2の合計数が表示されると思います。 このcolumn2の合計数に対してwhere句で絞込みを行う方法はありませんか? asで定義した値をそのままwhere句で使用できないとの事なので、 select column1,count(column2) as column2_num from hoge_table where count(column2) = '1' group by column2_num とやってみたんですが、検索出来ませんでした。 ご存知の方、ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPからのLike検索について。

    初めまして。 ロリポップでPHPとMySQLを使ってHPを作成しているのですが Likeの条件を付け足すと結果が取得できなくなってしまいます。 ロリポップ上の【phpMyAdmin】で同じSQLを実行すると 結果を取得してくれるのですが PHP上でLike条件を付け足すと、上手く結果を取得してくれなくて困っています。 $key = "あ"; $LIKE = " where furigana Like '$key%'"; $SQL = "select count(*) from item_info" . $LIKE; $rst = mysql_query( $SQL, $con ); print $SQL; $col = @mysql_fetch_row($rst); $ret[0] = mb_convert_encoding($col[0],"SJIS","EUC-JP"); print "<br>"; print $ret[0]; このSQLで結果【1】が取得できるはずなのですが 表示すると必ず【0】となってしまいます。。 上記のコードに何か間違いがありますでしょうか? ご教授お願い致します。

    • 締切済み
    • PHP
  • WHERE句の?

    お世話になります よろしくお願いします。 さっそくで申し訳ないのですが SQL分で SELECT test01 FROM test WHERE test01 = ? の「?」というのはどういう意味があるのでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 特定条件でWHERE句の条件を変更したい

    @jouken int @sql varchar(MAX) @select varchar(MAX) @where varchar(MAX) set @select = 'select * from table1' set @where = ' where case when @jouken = 0 then 'field1 = 1' when @jouken = 1 then 'field1 = 1 or field2 = 1' when @jouken = 2 then 'field1 = 1 or field2 = 1 or field3 = 1' end ' set @sql=@select+@where exec(@sql) 上記のような文字列の組み合わせでの作成でやりたいことはできたのですが、 こちらを直接SQLの中でやりたいのです。 以下の文は機能しません。 select * from table1 where case when @jouken = 0 then field1 = 1 when @jouken = 1 then field1 = 1 or field2 = 1 when @jouken = 2 then field1 = 1 or field2 = 1 or field3 = 1 end ご教授の程、よろしくお願い致します

  • 複数カラムに対するLIKE文の最適化

    column1~column3のデータに文字検索をしたいのですが、 下記のような不恰好なSQLしか思いつきません、、。 select * from tb where   ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' ) and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' ) and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' ) 試しに、 select * from tb where   ( ( column1 or column2 or column3) like '%word1%' ) and ( ( column1 or column2 or column3) like '%word2%' ) and ( ( column1 or column2 or column3) like '%word3%' ) と考えたのですが、これですと検索結果0件になってしまいます。 もっとスマートなSQL文がありましたら、ご教授頂きたいです。

    • ベストアンサー
    • MySQL