SQLのselect文でデータを抽出する方法

このQ&Aのポイント
  • Access2003とWin XP環境で動作している場合、select文を使用してデータを抽出する方法を教えてください。
  • 以下のテーブルのデータから、STOCKに空が入っているIDで、同じIDでSTOCKにデータがある行を抽出したいです。
  • 抽出条件は、STOCKに空が入っている行を選択しないことです。
回答を見る
  • ベストアンサー

Select文を教えて下さい

select文についてお教えください。環境はAccess2003,Win XPで動かしています。 TABLE ID(INT),STOCK(INT) 001,100 001,200 001, 002,200 002,300 002,400 003,100 上記のようなテーブル、データがあります。 ■抽出したい行 001,100 001,200 ■抽出条件 STOCKに空がはいっている。 STOCKに空がはいっている行は選択しない。 STOCKに空がはいっているIDで、同一IDでSTOCKにデータがある行を抜き出したいです。 どのようにSQLを組み立てればよいかわかりません。 宜しくお願い致します。

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

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

select table.id, table.stock from [table] where id = (select table.id from [table] where table.stock is null) and table.stok is not null とかかな。

mellow91
質問者

お礼

凄いです!問題なくできました!ありがとうございます!感謝感謝です!

その他の回答 (2)

回答No.3

ANo.2さんの方法で可能だと思いますが、クリエ一つでやりたい場合は、 テーブルからクエリを作成して、STOCK の抽出条件に下記の式を記述 In (SELECT ID FROM TABLE WHERE STOCK Is Null) AND Is Not Null SQLだと、 SELECT ID, STOCK FROM TABLE WHERE ID In (SELECT ID FROM TABLE WHERE STOCK Is Null) And STOK Is Not Null; これは、ANo.1さんのSQL の = を In に変更しただけです(複数の結果を返すサブクエリに = は使えない)。 他にも、 SELECT ID, STOCK FROM TABLE INNER JOIN (SELECT DISTINCT ID FROM TABLE WHERE STOCK Is Null) WHERE STOK Is Not Null; とか、いろいろあります。

mellow91
質問者

お礼

凄いです!問題なくできました!ありがとうございます!感謝感謝です!

noname#217196
noname#217196
回答No.2

本格的に取り組むならAccess SQLの解説本で学習。SQL言語はメーカー製品による方言があるため他の製品とは書き方を変えなくてはならないことがあり得ます。 手っ取り早く済ませるには、Accessのクエリウィザードを利用すること。 ウィザードではテーブルまたはクエリ結果テーブルとフィールドとをビジュアルに指定して、一致、差分をSQLの知識なしでも抽出するクエリが簡単に作成できます。できればAccessの解説サイトなどでクエリウィザードの使い方を学習しておくのが望ましいです。 ウィザードだと、まず当該テーブルのSTOCKフィールドの値がNULLのIDフィールドを抽出するクエリを作成。(クエリ1) 次に、ウィザードで当該テーブルのSTOCKフィールドの値がNULLでないレコードを抽出するクエリを作成。(クエリ2) 最後にウィザードで、クエリ1とクエリ2のクエリ結果テーブルを突き合わせてIDフィールドの値が一致するレコードを抽出するクエリを作成。(クエリ3)。 クエリ3を実行することで、期待した結果は得られるでしょう。

mellow91
質問者

お礼

ご回答ありがとうございます!確かにクエリを複数やればできますね!私は一発でやりたかったので、No1さん、No3さんのを参考にさせていただきました!ご回答ほんとうにありがとうございます!

関連するQ&A

  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Select文の遅延

    以下の.net関数を使用して、Select文を作成し SqlServerからデータを抽出しています。 http://msdn.microsoft.com/ja-jp/library/zxkb3c3d(v=vs.110).aspx http://msdn.microsoft.com/ja-jp/library/system.data.common.dbdataadapter.selectcommand(v=vs.110).aspx 条件を変え二つのSelect文を作成したところ、 後者だけが極端に遅延しタイムアウトしてしまいます。 (1)Select ID From TestView Where ID = 0 ※ID列はint型 (2)Select ID From TestView Where ID = 1 ※ID列はint型 Select対象となるデータ数(TestView)はかなりの量がありますが、 ID = 0、ID = 1 によって抽出されるデータ自体はどちらも10件程度です。 なぜID = 0ではすぐに抽出でき、ID = 1では遅延するのか全く原因がわかりません。 私自身も色々と確認をしているのですが、 過去の経験則や、ここを確認すると良いなど 調べるための情報がありましたらご提供頂けませんでしょうか? 宜しくお願い致します。

  • select文の記述について

    select文の記述について質問させていただきます。 下記のデータベースのテーブルの先頭からnumberを条件として 2名分のデータをselect文にて抽出したいと思っております。 (numberが重複し、重複数も異なるデータとなります。) select文の記述をどのようにするか教えていただければと思っております。 よろしくお願いいたします。 データベースのテーブル +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | | 23 | suzuki | 274 | 36 | | 45 | suzuki | 274 | 16 | | 59 | suzuki | 274 | 89 | | 73 | suzuki | 274 | 75 | | 80 | hanako | 89 | 24 | | (以下続く) | +——+—————+—————+————+ 抽出結果 +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | +——+—————+—————+————+

    • ベストアンサー
    • MySQL
  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • SELECT文 複数のテーブル参照について

    ASPとAccessを使用しています。 フォームから複数の値を入力させ、Access(複数のテーブル)を参照し、結果を表示させたいのですが、SELECT文でエラー表示。 初心者に毛の生えた程度しかしりませんので、教えていただきたく、お願いいたします。 以下3つのテーブルがあります。テーブルAの「検索用ID」(主キー)をテーブルB・Cの「検索用ID」にリレーションシップでつなげています。 tebleA-------------- 検索用ID 名前 備考 ----------------------- tebleB-------------- 検索用ID 地域 ----------------------- tebleC-------------- 検索用ID 職業 ----------------------- フォームで入力させるのはテーブルBの「地域」とテーブルCの「職業」 の値です。 その「地域」と「職業」からOR条件でテーブルAのデータを抽出したいのです。 SQL = "SELECT tebleA.* FROM tebleA,tebleB,tebleC WHERE tebleB.地域 = "& Request.QueryString("地域の値") &" OR tebleC.職業 = "& Request.QueryString("職業の値") &"" SQLに自信がありません・・・よろしくお願いいたします。

  • SQLのSELECT文教えてください。

    VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード

  • MySQLのselect文で、最大ID値のデータを呼び出す

    MySQLのテーブルのフィールド名として「ID」を登録しています。(型はint) そこで、select文で最大ID値のデータを呼び出すにはどうすればいいのか教えて頂けないでしょうか? select * from tableA ?????;

    • ベストアンサー
    • MySQL
  • select文でフリーズします。

    お世話になります。 oracle11.2で とあるテーブルに select * from テーブル名(条件なし) としたらフリーズする現象が起きました。 元々のテーブル内には25万行のデータがあったため 同じ構造で違う名前のテーブル(データは1行もなし)を新規作成して 同じようにselect文をなげたところこちらもフリーズしてしまいました。 構造は約50の列があり 列数を指定して検索した場合、どちらのテーブルも結果が返ってきますが すべての列を指定しようとするとフリーズしてしまいます。 どのあたりを疑えば良いでしょうか? よろしくお願いいたします。

  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • SQLのSELECT文でのランダム抽出について

    SQLのSELECT文でのランダム抽出について データベースSQLiteでSELECT文の結果をランダムに抽出するには ORDER BY RANDOM()を使うようですが、前回ランダムに抽出された順序と同じ結果を得るにはどのようにすればよいでしょうか。 MySQLの場合は、ORDER BY RAND(n)でnの値を同じにすれば、同じ順序で抽出できるようですが、SQLiteでは無理なようです。 今考えているのはRANDOM()で得られた列の一つ(たとえばID)を一時的に別のテーブルを作成して保存後、その一時テーブルを利用するというものですが、もっと良い方法があるのではと思います。 何か別の方法がありましたら、教えていただきたくよろしくお願いいたします。