dポイントプレゼントキャンペーン実施中!

SQL NOT INで抽出できない

SQLで条件抽出したいと思っています。テーブル1に「名前」というフィールドがあるとします。名前には「青木さやか」、「矢口真里」、「青山裕子」、「山田はな子」・・・などがあります。文字列の中に「青」や「子」が含まれていたら、抽出条件から外すといった処理をしたいと思っています。この例でいうと、「青木さやか」、「山田はな子」は抽出条件から外します。

そこで、
select 名前 from テーブル1 where 名前 NOT IN('青','子')
といったら文を書きましたが、うまく動きません。どういった文にすればよいでしょうか?よろしくお願いいたします。

A 回答 (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/HA10076 …
(適用対象がAccess2007となっていますが、それ以前のバージョンでも同様)
    • good
    • 0

仮に、Accessでの話であれば・・・



SELECT テーブル.名前
FROM テーブル
WHERE (((テーブル.名前) Not Like "*青*" And ((テーブル.名前) Not Like "*子*")));

何のSQLについての質問なのかを具体的に記入しましょう。
目的によっては「構文」に違いがある場合も十分考えられますから。
    • good
    • 0

select 名前 from テーブル1 where (名前 NOT like '%青%') AND (名前 NOT like '%子%');



――とか。
MS-Accessだとうまくいかないかも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す