複数条件を含むSQLの書き方
- 複数の条件を含むSQLの書き方について教えてください。
- name1、name2、name3のいずれかに「りんご」が含まれ、かつhideが0であるレコードを取得する方法を知りたいです。
- 「select * from apple where hide=0 and (name1 like '%りんご%' or name2 like '%りんご%' or name3 like '%りんご%')」というSQLで試してみましたが、想定した結果が得られませんでした。
- ベストアンサー
複数の条件がある場合のsqlの書き方
下記の場合、どのようなsqlを書けばいいのでしょうか? 以下のようなテーブルがあるとします。 apple ← テーブル名 name1, name2, name3, hide←カラム 日本, おいしい, 赤りんご, 1←ここからデータ アメリカ, りんご, い, 0 りんご, まずい, 高い, 0 ------------------------------------ 【条件】 name1, name2, name3 のどれかが”りんご”が含まれている かつ hide が 0 どのようにすればいいのでしょうか? ためしに、 select * from apple where hide=0 and name1 lile %りんご% or name2 like %りんご% or name3 like %りんご% で試してみましたが、希望した結果が出ませんでした。 どうぞよろしくお願いします。
- a-z_A-Z
- お礼率85% (222/260)
- MySQL
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
select * from apple where hide=0 and (name1 lile %りんご% or name2 like %りんご% or name3 like %りんご%) ですね。 select * from apple where hide=0 and name1 lile %りんご% or name2 like %りんご% or name3 like %りんご% だと select * from apple where (hide=0 and name1 lile %りんご%) or name2 like %りんご% or name3 like %りんご% で解釈されます。
関連するQ&A
- MYSQLで全てのカラムから検索する。
tbというテーブルのbangというカラムに4が含まれていれば表示というのは select * from tb where (bang) like '%4%' ; という形になりますが、このtbテーブルにさらにname,tukiというカラムがあったとして カラムに関係なくレコードのどこかに4が入っていれば抽出するというSQL文が書きたいです。 select * from tb where bang like '%4%' or name like '%4%' or tuki like '%4%' ; と書くことで何とか今まではやってきたのですが、カラム数が増えてきてしまったので、ものすごく長いSQL文なってしまいました。 もう少しスマートにする方法はありませんか?
- ベストアンサー
- MySQL
- 複数カラムに対する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
- SQL(PostgreSQL) select文
SQLを始めたのですが、少しつまずいたので、質問させてください。 住所録検索等で、 SELECT * FROM test WHERE name LIKE '%goo%'; と書くと、nameというカラム名から goo という文字列の入ったレコードを 検索できると思います。 そこで、この goo という文字列を test テーブル全体から検索したいのですが わかりません。 teat テーブル全体から(どこのカラム名からでも)検索の仕方を教えてください。 初歩的な質問ですみません。 参考HPでもかまいません。
- ベストアンサー
- その他(プログラミング・開発)
- 複数条件のSQL文
こんばんは。 SQL文を書いていますが困っています。 複数条件のつなげ方がうまくいかないのです。 通常のSQLでかけば・・・ (1)WHERE(AreaID='OSAKA') (2)WHERE Size BETWEEN 'S' AND 'LL' (3)WHERE Adrs LIKE '豊中市%' と3文になるような複数のSQL条件を・・・ 「SELECT * FROM ordermaster 」につなげたいと思っています。 どのようにつながれば正解なのでしょうか? 是非とも宜しくお願い致します。
- ベストアンサー
- その他(データベース)
- PHP SQL 問合せについて
PHP SQL 問合せについて http://okwave.jp/qa/q7689206.html での質問の続きとなります。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか? 回答 select * from tableA x order by (select count(*) from tableA y where y.name = x.name ) ,No で解決していますが、 select * from tableA x where name ='果物' とした場合、結果が異なります。 (結果が多い順にならない) 出現回数が多い順に並べるには、どのような記述になりますか? データには「果物以外のデータが含まれている」とします。 宜しくお願い致します。
- 締切済み
- PHP
- Oracle SQLの、where句内の条件文について教えてください。
Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定) and (2)(column_nameに、●●が含まれるデータ)
- 締切済み
- Oracle
- 文字検索 (LIKE)を使った場合
テーブル「USERS」の項目「FAMILY_NAME」「FIRST_NAME」をつなげた文字列に対して検索を行ないたいのですが、以下の「LIKE」を使ったSQL分ではカラムがないとエラーになるようです。 方法があれば教えて下さい。 よろしくお願いします。 テーブル:USERS 項目: FAMILY_NAME FIRST_NAME 値: 三木 直人 中川 三郎 SELECT CONCAT(FAMILY_NAME,FIRST_NAME) AS USER_NAME FROM USERS WHERE USER_NAME LIKE '%三%'
- ベストアンサー
- MySQL
- SQLについて
こんにちは、honiyonです。 良い質問タイトルが思いつきませんでした...(^^; 2つのテーブルがあります。(仮定です) ・オーナーの情報テーブル(owner) ・オーナーの車の情報テーブル(car) この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。 これを1つのSQLで SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN'); とか、 SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno); とかやってみましたが、涙が出るほど遅いです。 しかし SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno); とすると超高速です。 なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。 宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。
- 締切済み
- その他(データベース)
お礼
ありがとうございます。 希望通りの結果になりました。 まさか、カッコをつけるとは思いませんでした。 いろいろ調べたのですが、今回のような検索を解説しているページを見つけることができませんでした。 おかげで大変助かりました。 ありがとございました。