• ベストアンサー

レコードの有無をすばやく検索するSQL文

初歩的な質問で申し訳ありません。 テーブルAの中に、キー1が100から109までのキーを持つレコードがあるかないかを調べるSQL文を教えてください。 テーブルA キー1 キー2 100   1 100   2 105   1 107   1 上記の場合結果は 100  有り 101  なし 102  なし 103  なし 104  なし 105  有り 106  なし 107  有り 108  なし 109  なし と表示したいのです。 よろしくご教授ください。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

PostgreSQLにはgenerate_seriesという関数があります。これを使うと簡単に連続値が得られます。 後、テーブルAの件数が少ないか、キー1に索引があれば select a, case when exists ( select 1 from テーブルA where テーブルA.キー1 = s.a ) then '有り' else '無し' end from generate_series( 100, 109 ) as s(a); も検討してみてください。

Horirin39
質問者

お礼

ご回答ありがとうございます。 generate_series関数を使ってみます。 簡単そうでテーブル件数が増えても対応できるで便利ですね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

PostgreSQL8.2以降なら複数行VALUES句が使えますので、VALUESで100~109の定数テーブルを作る方法も有りますね。 例) -------------------------------------------- SELECT キー1, CASE WHEN COUNT(テーブルA.キー1) > 0 THEN '有り' ELSE 'なし' END FROM (VALUES(100), (101), (102), (103), (104), (105), (106), (107), (108), (109)) AS num (キー1) LEFT OUTER JOIN テーブルA USING (キー1) GROUP BY キー1 ORDER BY キー1; ------------------------------------------------

Horirin39
質問者

お礼

ご回答ありがとうございました。 お礼が遅くなり申し訳ありません。 分かりやすいのですが、定数テーブルの数が増えると 厄介ですね。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

SELECT DISTINCT T1.キー1 ,CASE WHEN T2.キー1 IS NULL THEN 'なし' ELSE '有り' END FROM (SELECT 100 AS キー1 UNION ALL SELECT 101 AS キー1 UNION ALL SELECT 102 AS キー1 UNION ALL SELECT 103 AS キー1 UNION ALL SELECT 104 AS キー1 UNION ALL SELECT 105 AS キー1 UNION ALL SELECT 106 AS キー1 UNION ALL SELECT 107 AS キー1 UNION ALL SELECT 108 AS キー1 UNION ALL SELECT 109 AS キー1)AS T1 LEFT JOIN テーブルA T2 ON T1.キー1=T2.キー1 ORDER BY 1 ではどうでしょうか。

Horirin39
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなり申し訳ありません。 シンプルで分かりやすいのですが、 検索件数が増えるとコーディングが長くなるのが難点ですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQL文の書き方

    SQLを勉強しています。 レコードの中で指定フィールドの文字列が、指定文字から始まるレコードを取り出したいのですがSQL文の書き方がわかりません。 例) 1, AAA 2, BBB 3, CCC 4, ABC 上記の4つのレコードから"A"から始まるレコードを取り出したい。 結果は[1, AAA]と[4, ABC]が欲しいのです。

  • レコード集計のSQLについて

    お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、  Bテーブルのcd1~cd10に格納されている各コード単位に集計した  Aテーブルのmoney及びpersonの値を取得したい。  例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。

  • SQL文の構築について教えてください。

    SQL文の構築について教えてください。 こんばんは。Oracle9iのデータベース検索で、どうしてもSQLが思い浮かばないため、質問させていただきます。 ■Table ID    NUM   SIGN 100   1    A 100   2    A 101   1    A 102   1    B 103   1    B 104   1    C 首キーはID、NUMです。 上記のようなテーブルで、 IDが同一かつNUMが最大のもので、 SIGNが同一のレコードで、2件以外のレコードを抽出したいです。 (例表でいうと、ID104のレコードのみが抽出されるようにしたい) すこし急ぎなんですが、SQLが得意でお時間がある方、力を貸していただけないでしょうか。 よろしくお願い致します。

  • SQL文で教えてください。

    次のようなデータがあったとします。 HANCD,KOKCDは主KEYで、すべてStringです。 HANCD|KOKCD|DAY1|DAY2|DAY3|DAY4 0001|000001|20081001|20080928|20080930|20081003 0001|000002|20081210|20080925|20081030|20081015 0002|000001|20080911|20080918|20081005|20081002 0002|000003|20080917|20080925|20080928|20081012 0003|000003|20081006|20081210|20081210|20081002 0003|000004|20081011|20080923|20081013|20080926 上記6人のレコードでDAY1~DAY4の中でDAY3が最大である人の 結果を返すSQL文がわからなくてこまっています。 MAXは使えないし・・・。 回答としては HANCD|KOKCD 0002|000001 0003|000003 0003|000004 が結果として返ってくるSQL文です。 よろしくお願いいたします。

  • SQL文で2つのSELCT文の結果を繋げる方法

    SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。 Left Join でもと思ったのですが、片側にしかないのも、1レコードとして出力したいです。 テーブルの例と出力の理想は以下です。 また、上記の応用でこれを4テーブル(SELECT文)を繋げて、下記例で言うと、日付と商品コードがキーで、どのテーブルに存在しても、結果を1行で返せるでしょうか。 【テーブル1(SELECT文1)】 F_仕入 伝票日付 商品コード 仕入金額 2014/07/01 101     10,000 2014/07/02 102     15,000 2014/07/05 104 20,000 【テーブル2(SELECT文2)】 F_売上 伝票日付 商品コード 売上金額 2014/07/01 101     15,000 2014/07/02 102     25,000 2014/07/03 103 13,000 上記2つのSELECT結果 伝票日付  商品コード 仕入金額 売上金額 2014/07/01 101 10,000 15,000 2014/07/02 102 15000 25,000 2014/07/03 103 13,000 2014/07/05 104 20,000 よろしくお願いします。

  • SQL文の副問合わせについて

    いつも勉強させて頂いています。 SQLの副問合わせでわからないところが出て来ましたので、教えて頂けると助かります。 <環境> VB 2008 SQLSERVER 2005 <内容> 金額の集計をしたいのですが。 テーブルA 品番(主キー) 品名 予測金額 テーブルB 品番(キー)  品名 確定金額 テーブルAの品番に対してテーブルBのレコードが1対多の関係です。 <結果> 品名に「あ」を含むもの、 テーブルAのCOUNT、 テーブルBのCOUNT、 予測金額合計、 確定金額合計 上記結果で出力したいのですが、困っています。 宜しくお願い致します。         

  • Insertで重複となったキーをさがすSQL文

    テーブルの移行(Aテーブルのデータをキーを変更してBテーブルにInsertする)を行ったところ、 ERROR: duplicate key violates unique constraint "Bテーブル_unique"とメッセージが出ます。 SQL文はつぎの通りです。 INSERT INTO Bテーブル(契約番号, ユニット番号, 資源番号, 入力日, 数量) SELECT a.契約番号, a.ユニット番号, a.資源番号, a.入力日, a.数量 FROM Aテーブル a ; Bテーブルのキーは、契約番号, ユニット番号, 資源番号, 入力日です。 Aテーブルのキーは、契約番号,入力日,レベル1,レベル2です。 データ件数は約3万件です。 Bテーブルを調査して、重複となるレコードを表示させたいのですが、 SQL文がわかりません。 よろしくご教授ください。

  • SQL文が上手く記述できません・・。

    <<テーブル名:master>> SHOUHIN NO  KOSU ------- --- --------------- A       1   500 A       2   100 A       2   300 A       2   200 A       3   220 A       3   150 A       4   200 A       4   300 A       4   100 <<抽出結果>> SHOUHIN    NO1    NO2    NO3    NO4    GOUKEI -------    ---    ---    ---    ---    ------ A        500    600    370    600    2070 上記のmasterテーブルから、NO毎にKOSUの値を集計して 1レコードにまとめて下記の抽出結果のようにデータを抽出したいと 考えているのですが、なかなか上手くSQLを記述する事が出来ません・・・。 下記のような結果を抽出することは可能でしょうか? ご存知の方がいらっしゃれば、ご教授頂ければ幸いです。 宜しくお願い致します。

  • 一つのSQL文で取得したい

    こんにちは。 テーブルAに以下のようなデータがあるとします。 ID |名称 |項目 -------------- 01 |ああ | 02 |いい | 03 |うう |01,02 04 |ええ |01 SELECT文で取得したいのは、フィールド「項目」の値を、他のレコードの名称で置き換えた列です。 つまり、 ID |名称 |項目 |項目名称 ------------------ 01 |ああ | | 02 |いい | | 03 |うう |01,02 |ああ,いい 03 |ええ |01 |ああ という結果が欲しいということです。 「項目」の値はカンマで区切られています。 これを一つのSQLで取得したいと思っています(テーブルの結合、サブクエリーはOK)が、方法がわかりません。 どなたかどうぞご教授ください。 よろしくお願い致します。

  • 【SQL】SELECT 文で外部のレコードと比較する。

    こんにちわ タイトルがわかりにくく申し訳ありません。^^;) 【やりたい事】 ○テーブルA に下記のレコードが有ります。 ID FIRSTNAME  LASTNAME 00 ICHIRO     SUZUKI 01 TARO      YAMADA 02 TSUYOSHI   SHINJYO ○テーブルB に下記レコードが有ります。 ID LASTNAME 00 SUZUKI 01 SASAKI ここで テーブルB に登録されている LASTNAME と同じ LASTNAME を持つレコードを テーブルA から抽出する SQL を教えて頂けないでしょうか? この状態で抽出されるレコードは 00 ICHIRO SUZUKI です。 お時間のある時で構いませんので、よろしくお願い致します。

このQ&Aのポイント
  • EP-978A3のUSB接続が再起動後に認識されなくなる問題が発生しています。
  • 最新のドライバをインストールしても問題が解消されないため、無線接続や無線ダイレクト接続を試してみました。
  • 他のWin10PCや別のプリンタでも同様の現象が発生するため、対応策をご教授ください。
回答を見る