• ベストアンサー

あいまい検索の仕方で・・・

SELECT 担当, 商品, 売上品 FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND 売上品 IN ('竹輪','胡瓜') とサブクエリで出したいものが出ますが・・・あいまい検索にしたいと思っています。 SELECT 担当, 商品, 売上品 FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 like '%竹輪%') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 like '%胡瓜%') AND 売上品 IN ('竹輪','胡瓜') まではわかるのですが売上品 IN ('竹輪','胡瓜')はどうすればよいのでしょうか?

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

質問者さまが何度か類似の質問をされているのですが、元のクエリに対するコメントは私だったので。。 http://qanda.rakuten.ne.jp/qa4197103.html 「竹輪と胡瓜の<両方>を売上品に持っている担当のデータを、竹輪または胡瓜に関してのみ表示する」って内容だったと思います。 それでこんなクエリになっているのですが、その流れからいくと、以下の通りにするしかないでしょうね。 SELECT 担当, 商品, 売上品 FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 like '%竹輪%') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 like '%胡瓜%') AND (売上品 LIKE '%竹輪%' OR 売上品 LIKE '%胡瓜%')

その他の回答 (1)

回答No.1

回答の前に・・ > SELECT 担当, 商品, 売上品 FROM TableName > WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') > AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') > AND 売上品 IN ('竹輪','胡瓜') というSQLは、 SELECT 担当, 商品, 売上品 FROM TableName WHERE 売上品 IN ('竹輪','胡瓜') に等しくないですか?(無駄に難しく書いてるように思いますけど??) で、回答ですが・・ WHERE 売上品 IN ('竹輪','胡瓜') は、 WHERE 売上品 = '竹輪' or 売上品 = '胡瓜' と同じなので、 SELECT 担当, 商品, 売上品 FROM TableName WHERE 売上品 like '%竹輪%' or 売上品 like '%胡瓜%' のような記述が適正かと思いますよ。

関連するQ&A

  • データが重複するのを回避するには・・・(泣)

    SQLでサブクエリを作りましたが結果が複数同じものが出てしまいます。 DISTINCTだと一つの行しか見えなくなってしまいます。 レコードの構成自体がそうなっているからなんですが・・・ SELECT 担当, 商品, 売上品 FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND 売上品 IN ('竹輪','胡瓜') ; 竹輪と胡瓜の要素を含んでいる担当を出したいのですが”担当”が重複してしまうのを解消したいです。 あとOrder By とGroup Byは併用不可ですか? _____担当_____商品_____売上品 _____XXXX_____1111______竹輪 _____XXXX_____1111______胡瓜 _____XXXX_____1111______西瓜 _____XXXX_____1111______ハンバーグ _____XXXX_____2222______竹輪 _____XXXX_____2222______茄子 _____XXXX_____2222______西瓜 _____XXXX_____2222______生姜焼き _____XXXX_____2222______柚子 _____XXXX_____3333______竹輪 _____XXXX_____3333______キャベツ _____XXXX_____3333______胡瓜 _____XXXX_____3333______冬瓜

  • サブクエリとDISTINCTGROUPBYの併用は不可??

    SQLで副で問い合わせたときグループバイやDISTINCTがエラーになってしまいます。 何故なのか検討がつきません。 同じデータを持つ様々なデータベースでやってますがどれもエラーになります。 オラクルやMYSQLやpostgreSQLです。 SELECT * FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND 売上品 IN ('竹輪','胡瓜') ; これは普通に出来ます。 これに対して… SELECT distinct 担当, 商品, 売上品 from…かGroup By 担当, 商品とやっても何故かエラーが出ます… 何か間違ってますでしょうか?

  • サブクエリで別の列から組み合わせたいのですが

    以前「売上品で”竹輪”と”胡瓜”を含んだ担当コード」の出し方で教わり出来ました。その節は有難うございました。 今度また困ってしまったのですが同じようにサブクエリを用いて検索しようと思うのですがうまく出来ません。 売上品の竹輪か品コードのどちらかを含むものを検索したいのですがレコードが全く出てきません(エラーにもなりません・・・) 何がいけないのか見当がつきません・・・ 品コードは売上品に紐付けされているコードです。 _____担当_____商品_____売上品_____品コード _____XXXX_____1111______竹輪______T000001 _____XXXX_____1111______胡瓜______K000005 _____XXXX_____1111______西瓜______S000010 _____XXXX_____1111______パン______P000023 _____YYYY_____2222______竹輪______T000001 _____YYYY_____2222______茄子______N456789 _____YYYY_____2222______西瓜______S000010 _____YYYY_____2222______生姜______SH01234 _____YYYY_____2222______柚子______Y100000 _____ZZZZ_____3333______竹輪______T000001 _____ZZZZ_____3333______パン______P000023 _____ZZZZ_____3333______胡瓜______K000005 _____ZZZZ_____3333______冬瓜______T111111 「売上品で”竹輪”と品コードで”K000005”を含んだ担当コード」を抽出したいのですが・・・ SELECT 担当, 商品, 売上品 FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 品コード = 'K000005) AND 売上品 IN ('竹輪','K000005’) 違いますでしょうか・・・・

  • 同一列からandでSELECTしたいのですが・・・

    Oracle10gかMySQLでやることになるとおもいます。ひょっとしたらPostgeSQLかも??? _____担当_____商品_____売上品 _____XXXX_____1111______竹輪 _____XXXX_____1111______胡瓜 _____XXXX_____1111______西瓜 _____XXXX_____1111______ハンバーグ _____YYYY_____2222______竹輪 _____YYYY_____2222______茄子 _____YYYY_____2222______西瓜 _____YYYY_____2222______生姜焼き _____YYYY_____2222______柚子 _____ZZZZ_____3333______竹輪 _____ZZZZ_____3333______キャベツ _____ZZZZ_____3333______胡瓜 _____ZZZZ_____3333______冬瓜 上記のようなテーブルがあるとします。 その中から売上品の項目しか分からないとします。売上品で”竹輪”と”胡瓜”を含んだ担当コードを出したいのですが・・・ 例えば一つずつなら select 担当, 商品, 売上品 from TableName where 売上品 = ”竹輪”; _____XXXX_____1111______竹輪 _____YYYY_____2222______竹輪 _____ZZZZ_____3333______竹輪 select 担当, 商品, 売上品 from TableName where 売上品 = ”胡瓜”; _____XXXX_____1111______胡瓜 _____ZZZZ_____3333______胡瓜 ですが売上品で”竹輪”と”胡瓜”を含んだものがほしいので結果としては _____XXXX_____1111______竹輪 _____ZZZZ_____3333______竹輪 _____XXXX_____1111______胡瓜 _____ZZZZ_____3333______胡瓜 となります。和の集合のような感じでしょうか?ANY ALLでしょうか? 売上品の中で竹輪と胡瓜二つの要素を持った結果だけ欲しいのです。よくわからないので教えて下さい。

  • SQL キーワード検索にて

    お世話になります。 DBからSQLでキーワードによる検索をかけるときですが、 二つ以上のワードがあるときに、一つのキーワードがほかのキーワードと かぶってしまう場合、例えば゛、『あいうえお』と『いうえ』等で絞り込むと、 結果的に『あいうえお』が含まれるものだけが該当しますが、これを、 『あいうえお』を含み、更にそれ以外にも『いうえ』が含まれるものを 絞り込むには、どうすればよいでしょうか。 つまり、『あいうえお』のみしか含まれないものは該当しないようにする方法です。 現在のSQLは、 (SELECT * FROM xxxx WHERE tablename LIKE '%あいうえお%' AND tablename LIKE '%いうえ%') のような感じです。 使用しているDBは、MySQL、SQLiteです。 何卒よろしくお願いいたします。

  • LIKE検索の場合うまくいきません

    WEBアプリとSQLServerでSELECTをするときに不正をされないように SELECT * FROM DB WHERE DB.A = 検索文字 を SELECT * FROM DB WHERE DB.A= @A のようにして、@Aを後で指定しますが、 SELECT * FROM DB WHERE LIKE '%検索文字' のようにLIKE検索の場合うまくいきません。 どのように記述したらいいのでしょうか? SELECT * FROM DB WHERE DB.A LIKE @A --> 駄目 SELECT * FROM DB WHERE DB.A LIKE '%@A' --> 駄目

  • sjisでのあいまい検索を教えてください

    Postgres8です。 データベースのエンコーディングは【SQL_ASCII】です。 LIKE検索をした場合のSJISの文字化けに対する対処方法を教えてください あいまい検索をしたいのですが、 文字化け対象文字を含む場合、 どのように記述すればいいのですか? select * from aaa where name = 'パソ\コン'; 上記のように完全一致で検索をすると抽出できます。 select * from aaa where name like '%パソ%' 上記のよう指定してlike検索をしても抽出できます。 しかし以下の場合どちらでも抽出できません。 select * from aaa where name like '%パソコ%' select * from aaa where name like '%パソ\コ%' よろしくお願い致します。

  • 日付の最大値を検索条件にする方法

    お世話になります。 ORACLEのMAX()関数を使用して、 下記内容を取得するSQLを作成しています。 ・商品テーブルから商品コードを取得したい ・上記の取得条件として、商品テーブルの日付項目が最新日付のレコードのみを 取得したい ・上記の取得条件に加えて、指定したいくつかの商品に該当するもののみを 検索対象としたい 【SQLサンプル】 SELECT 商品コード FROM 商品テーブル WHERE 商品コード IN (101, 102, 103) AND 在庫区分 = '0' AND 日付 = (SELECT MAX(日付) FROM 商品テーブル WHERE 商品コード IN (101, 102, 103) AND 在庫区分 = '0' ) AND ランク = (SELECT MAX(ランク) FROM 商品テーブル WHERE 商品コード IN (101, 102, 103) AND 在庫区分 = '0' ) 上記以外の書き方で何か良い書き方があれば、 ご教授願えますか? よろしくお願いいたします。

  • LIKEで検索

    MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします

    • ベストアンサー
    • MySQL
  • Access2007でSQLの複数列副問い合わせについて

    VB2005+Access2007を使用しております SQL文の複数列副問い合わせについて教えて下さい 検索をしても他のデータベースのものばかりヒットし、解決できません SELECT * FROM Uriage WHERE (Date, DateID) = (SELECT Date, DateID FROM Uriage WHERE NAME = 'cup') これを実行すると 「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド を複数返すサブクエリを作成しました。サブクエリのSELECT ステート メントを変更し、1 つのフィールドだけを指定してください。」 というエラーがでてしまいます。 形をかえ、 SELECT * FROM Uriage WHERE Date = (SELECT Date FROM UriageList WHERE NAME = 'cup') AND DateID =(SELECT DateID FROM UriageList WHERE NAME = 'cup') これを実行すると、 「このサブクエリでは 1 つのレコードしか返せません。」 というエラーがでてしまいます。 また、 SELECT * FROM Uriage WHERE (Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup') AND (DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup') を実行したところ、 エラーはでないものの、抽出結果が異なるものが出てきてしまいました。 これを解決するにはどのようにしたらよいのでしょうか? よろしくお願いいたします。 なお、某知恵袋にも同様の質問をしてしまいましたが、 回答者様への回答や追加質問が出来ず、 こちらに再質問させて頂きました。申し訳ございません。