- ベストアンサー
SQLで条件抽出したいと思っています
- SQL NOT INを使用して条件抽出する方法について質問です。
- テーブル1の名前フィールドから「青」や「子」を含むデータを除外したいです。
- 現在、select 名前 from テーブル1 where 名前 NOT IN('青','子')という文を試していますが、うまく動作しません。どのような文を使用すれば良いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
In演算子では指定したリスト内(→今回の例では「青,子」)と完全一致した ものしか抽出対象になりませんので、「リスト内の文字を含むもの」を抽出 したいということでしたら、既に回答がある通り、Like演算子を使用する必要 があります。 なお、リストとして列挙する項目がそれぞれ一文字ずつなのでしたら(つまり 「'青木', "裕子"」といった、複数文字の項目からなるリストでないなら)、 以下のSQLでも対応可能です: Select 名前 From テーブル1 Where 名前 Not Like "*[青子]*" 念のために明記しておきますが、角括弧内の項目は、カンマ等の区切りは 【無用】です。 (No.2の方と同様、AccessでANSI89系(→Accessの初期設定値)の場合。 メニューで「ツール(T)→オプション(O)」で『オプション』ダイアログを開き、 『テーブル/クエリ』タブを選択すると「SQL サーバー互換構文 (ANSI92)」欄 で設定変更が可能:Access2003) ※「ANSI○○」については下記URLを参照下さい。 また、今回の例では使えませんが、角括弧([ ])を使用した曖昧検索では、 ハイフン(-)を使用することで文字範囲を指定すること等も可能ですので、 併せて今後の参考まで: http://office.microsoft.com/ja-jp/access/HA100766011041.aspx (適用対象がAccess2007となっていますが、それ以前のバージョンでも同様)
その他の回答 (2)
- mhassy
- ベストアンサー率43% (16/37)
仮に、Accessでの話であれば・・・ SELECT テーブル.名前 FROM テーブル WHERE (((テーブル.名前) Not Like "*青*" And ((テーブル.名前) Not Like "*子*"))); 何のSQLについての質問なのかを具体的に記入しましょう。 目的によっては「構文」に違いがある場合も十分考えられますから。
- osamuy
- ベストアンサー率42% (1231/2878)
select 名前 from テーブル1 where (名前 NOT like '%青%') AND (名前 NOT like '%子%'); ――とか。 MS-Accessだとうまくいかないかも。