• 締切済み

SQLについて

お世話になっております 以下の内容、お分かりになる方ご教授お願い致します Win2000 Access2000 TESTテーブル Key1  Key2  Key3 100  5     1 100  5     2 100  5     3      ←X 100  10     4      ←X2 110  10     2      ←X3 各項目は全て数値型です 上記データ内容のときにKey1が100以上でKey2が5以上で Key3が3以上のデータを取得したいと思っております 結果としてXからX3までのデータを抽出したいのですが どの様に行えばよろしいでしょか? SELECT * FROM TESTテーブル WHERE Key1 >= 100 AND Key2 >= 5 AND Key3 >= 3 の様に組むとKey1が110の項目は取得できなくなります Key3 >= 3の様に組んでるのでだとは思いますが 組み方がわかりません 宜しくお願いします

みんなの回答

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

>結果としてXからX3までのデータを抽出したいのですが >どの様に行えばよろしいでしょか? 直接、ねらい打ちしかないとおもいますが。 SELECT * FROM TESTテーブル WHERE (key1 =100 AND key2=5 AND key3 = 3) OR (key1=100 AND key2=10 AND key3=4) OR (key1=110 AND key2=10 AND key3=2)

Tori_Mayo
質問者

お礼

返信遅れてすみません アドバイスありがとうございます 違う方法で対応しようと思っております また、何かありましたらお願い致します

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>Key1が100以上でKey2が5以上で 日本語の「で」を使って条件を接続した場合、 普通の解釈なら"AND"です。 >Key3が3以上 だとするなら、X3が抽出されないのは当然 なのではないでしょうか。 もう一度、各項目の条件と、結合(AND/OR)を よく整理してみてください。

Tori_Mayo
質問者

お礼

返信遅れてすみません アドバイスありがとうございます 違う方法で対応しようと思っております また、何かありましたらお願い致します

関連するQ&A

  • 2つの情報を1つのSQLで取得する方法について

    お世話になります。 SQL文で、下記内容のデータを取得する方法がわかりません。 ・TESTテーブルからA、B、Cの3項目のデータを取得する。 ・但し、この中のC項目については、WHERE句の条件を満たす データの最大値を取得する。 ・項目AおよびBの取得条件は、項目Cと同一条件とする。 ・目的は、項目AおよびBに関しては、WHERE句の条件を満たす  全てのレコードを取得し、項目Cにおいては最大値のみ取得したい。 上記内容を取得しようと考えた場合、 現時点で下記のSQL文を作成して実行しましたが、 うまくデータが取得できません。 SELECT A, B, C FROM TEST WHERE C = (SELECT MAX(C) FROM TEST) AND Z = 'xxxxx' AND Y = 'x' AND X = 'Y' ※項目X, Y, ZはTESTテーブルのカラムです ※上記SQLを、A、Bのみ取得用とCのみ取得用に   それぞれ分解して実行すると、それぞれの結果は   正常に取得できます。 2つの結果を1つのSQLで取得することは可能でしょうか? どなたかご教授願えますか?よろしくお願いいたします。

  • 【至急】SQLの結合について教えてください。

    select * from A where ab = '1' and cd = '2' select ef from B where ab = '1' and cd = '2' and ef = '3' 至急質問させてください。 上記SQLを結合したいです。(Oracleです) 取得したいデータはAのテーブルの全項目で、 取得条件として、Bのテーブルの項目ef = '3' だったらという条件を加えたいです。 キー項目は両テーブルとも同じ(ab, cd)です。 どのようなSQLがスマートでしょうか。。 無知で申し訳ございませんが、ご教授いただけますと幸いです。 よろしくお願いいたします。

  • sqlのwhereで指定した条件の前後を取得したい

    テーブル=T) KEY DATA 001 あ 002 い 003 う 004 え 005 お SQL) SELECT DATA FROM T WHERE KEY = 003 ; 上記のSQLでは、「う」のデータしか取得できませんが、 「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。 ちなみに、 SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2 と SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1 のUNIONでは上手く行きませんでした。 よろしくお願いします。

  • 【至急】SQLの結合について教えてください(2)

    select * from A select ef from B where ef = '3' かつ、A.ab = B.ab and A.cd = B.cd 至急質問させてください。 上記SQLを結合したいです。 取得したいデータはAのテーブルの全項目で、 取得条件として、Aのテーブルのキー項目 = Bのテーブルのキー項目に、Bのテーブルの項目ef = '3' だったらという条件を加えたいです。 どのようなSQLがスマートでしょうか。。 無知で申し訳ございませんが、ご教授いただけますと幸いです。 よろしくお願いいたします。 ※キー項目の値は条件に指定できない(持っていない)ことがわかりました。 先ほどの質問にご回答下さった皆様、申し訳ございません。

  • SQL - 3つのキーに含まれないもの?

    いつもお世話になっております。 テーブルAと、テーブルA_WRKがあり、 テーブルA_WRKはテーブルAと同じレイアウトです。 2つのテーブルのキーは3つあります。 二つのテーブルをUNIONでくっつけて表示したいのですが、 テーブルA_WRKにあるデータと同じキーのテーブルAのデータは 検索対象からはずしたいのです。 これがキーが一つだったら Select * テーブルA_WRK Where キー項目1 = 条件 Union Select * テーブルA Where キー項目1 = 条件 And キー項目1 Not In (Select * テーブルA_WRK Where キー項目1 = 条件) で検索できると思うのですが、 3つキーがある場合にどう書いてよいかわかりません。 使用DBはSQLServer2000です。 宜しくご教授お願いいたしますm(__)m

  • SQLで'ABC'をDBの'AB'にHIT

    sqlite3をVC++2013で扱っています。 もしかしたら、単純な方法があるのかもしれないので質問させてください。 DBに渡す文字が'ABC'でDB内のデータ'AB'にHITさせたいと思っています。 現状思いつく方法は select * from テーブル where キー like 'A%'; select * from テーブル where キー like 'AB%'; select * from テーブル where キー like 'ABC%'; と渡す文字を一文字ずつ増やして検索して row数が0以上の一番小さい数のデータを取得するという方法しか思いつかないのですが。 何か良い方法はありますでしょうか?

  • 1SQLで書けないものでしょうか

    初めて投稿します。 よろしくお願いします。 現状、下記の様な構成のテーブルがあります。 DB :oracle9iR2 テーブル名:test 名前 型 ------- ------------- key_data VARCHAR2(10) rireki DATE read_data VARCHAR2(10) プライマリキーは、key_dataとrirekiです。 この、データの中から、key_data毎に最新のrirekiの情報だけを 取得したいと考えています。 そこで、下記の様にクエリーを組んでいたのですが、 select key_data, rireki, read_data from test inner join ( select key_data, max(rireki) AS rireki from test group by key_data ) test2 on (test.key_data = test2.key_data and test.rireki = test2.rireki) 複数のテーブルが、上記の様なキー項目と履歴を持つ形で 構成されている為に、複数のテーブルを結合すると途端に パフォーマンスが落ちて困っています。 ひょっとしたら、oracleなら分析関数か何かで1SQLで書けないものか (それで、処理速度が向上出来れば)と云うことで、自分で調べて みましたが、良い方法が見つかりません。 同様のお悩みをもたれた方で、対処法がありましたら教えていただけると幸いです。 よろしくお願いいたします。

  • 【初歩的な質問ですが・・・】 SQL文書き方がわかりません

    SQLの知識に乏しい者です。 よろしくお願い致します。 ●テーブルA ・会計コード ・年度 ・部署番号 ・社員番号 ・その他幾つかのデータ ※Where句で「年度>2002年」以降を抽出 のテーブルがあります。 この時、Bテーブルで ●テーブルB ・会計コード(主キー) ・年度 ・部署番号(主キー) ・社員番号(主キー) ・その他幾つかのデータ ※Aテーブルで抽出されたデータの中から絞り込む というテーブルを抽出するSQL文を組みたいのですが、効率の良いやり方がわかりません。 副問合せで  Select [B表で抽出した列名…]  From B表  Where 会計コード = (Select 会計コード               From A表               Where 年度 > '2002')  AND 部署番号 = (Select 部署番号             From A表               Where 年度 > '2002') ・・・・以下省略 の様に書くと効率が悪い気がしました。 (実際には、副問合せが6個書くことになるため) 良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。

  • SQL MIN句

    テーブルには複数の主キーがあり、そのうちの3つの主キーを元に 最も古い日付の情報を取得したいです。 同じデータが複数あるので、副問い合わせ(=)でエラーになると思ったのですが エラーにならずにすべてのデータが取得されてしまいます。 テーブル id name sex date1 1 'A' '男' 20120101 1 'A' '男' 20120101 2 'A' '女' 20120102 select * from table where date1 = (select min(date1) from table where id = 1 and name = 'A' and sex='男'); 下記のような情報を取得するには、SQLとして間違えておりますでしょうか。 ↓ id name sex date1 1 'A' '男' 20120101 1 'A' '男' 20120101 お分かりの方、ご教授頂けませんでしょうか。 以上、よろしくお願い致します。

  • ACCESSのSQLで数値型に変換するには

    こんにちわ。今SQLの書き方が分からなくて大変困っております。 ACCESS2000で、テーブルが一つあるとします。 テーブルの内容は、氏名・点数の2項目だとします。 点数が50点より大きい人を抽出したいのですが、 項目は全てSTRING型にしないといけないため、 単純に比較できません。抽出した項目を数値型に 変換して、比較したいのですが、どのように書いたらいいのでしょうか。 SELECT  Shimei , CAST(Tensuu AS NUMERIC) FROM   Table1 WHERE   Tensuu > 50; このようなクエリを書いてみましたがエラーが出てしまいます。 ORACLEではTO_NUMBERなどの関数があると思うのですが、 ACCESSではどのようにしたらいいのでしょうか?? よろしくお願いします。

専門家に質問してみよう