• ベストアンサー

SQLの勉強中の者です。

SQLの勉強中の者です。 調べてもよく分からなかったので、分かる方、ご教授いただけると嬉しいです。 ●DBテーブル情報  A B C ---------------  1 1 1  1 2 1  1 2 2 ●取得条件 「A」=1 かつ「B」=1or2 であり、かつ 「B」=1の取得データと「B」=2の取得データで「C」が共通していること 上記例で言えば、テーブルの1、2行目を取得したいのですが… どんなSQL文を使えば良いのか、ヒントだけでも良いのでいただけないでしょうか。 どうぞ宜しくお願いします。

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

どのRDBMSをお使いかわかりませんが、以下の記述で大抵は行けると思います。 一応、2,3のRDBMSで試しました。 (エイリアスの記述はRDBMSによって癖があるので注意) select T1.* from テーブル1 as T1 where exists (select 'X' from テーブル1 as T2 where T2.A = T1.A and T2.B = '1' and T2.B in ('1', '2') and T2.B <> T1.B and T2.C = T1.C ) ご質問の要件のような「同じテーブル内でレコードをまたいだ条件がある」場合には、「自己結合」と言って、同じ「テーブル1」が2回登場するようなSQLになります。 今回の場合は、値の取得は1テーブルでよく、「条件に合致するものがあるか存在する事を確認したい」だけなので、EXISTS を使用します。 この様に、主たるテーブル(この場合はT1)と副問合せ側のテーブル(T2)を紐付ける事を「相関副問合せ」と言います。 [存在する事を確認する条件] (1)「A」=1 (2)「B」=1or2 (3)「B」=1の取得データと「B」=2の取得データで「C」が共通していること 上記を相関副問合せに当てはめて言い換えるとこうなります。 ↓ 「(1)(2)の条件を共通して満たすレコードで「自分以外(この場合はBが異なるもの)」で更にCは等しい」

miton_1
質問者

お礼

うわぁなるほどー! 同じテーブルを2回登場させるという考え方、まったく思いつかなかったです! 勉強になりました。ありがとうございました。

関連するQ&A

  • SQL(SELECT文)を教えてください

    SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付)  Name(名称) Value(値) 20130101      a      10 20130101      b      20 20130101      c      30 20130202      a      5 20130202      b      10 20130202      c      15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。

  • 重複せずに取り出すはSQLでできますか?

    アクセス2010です。 テーブルA AB AC DB GR から データの先頭文字だけを重複せずに取り出すには? テーブルB A D G 現在 rs.MoveNextでループを使い1個ずつ同じのがあるか、ないかで取り出していますが、SQL文1行だけで可能でしょうか?

  • SQL文を教えてください

    SQLを教えてください。 以下のようなテーブルを仮定しています。 A  B  C -------------- 10 12 1201 11 12 1203 11 13 1205 12 12 1206 A列をー意にして、A列とB列の全データを取得 したいのですが、2・3行目のような場合は C列の大きい方を取得したいのですが・・・ 欲しい結果 A  B C -------------- 10 12 1201 11 13 1205 <--- 12 12 1206

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • SQLについての質問です

    SQLの質問です。(Oracle) 二つのテーブル T1, T2 に、それぞれ三つのカラム A, B, C があり、A, B の値が同じである行においてT1のCからT2のCへ値をコピーするSQLを教えてほしいです。 以下、そのデータ例です。 テーブル T1 A B C --------- 1 AAA 10 2 BBB 20 3 CCC 30 テーブル T2 A B C --------- 1 AAA 0 2 XXX 0 4 YYY 0 この場合、結果としてテーブル T2は1行目だけがカラム Cの値がT1からコピーされ A B C --------- 1 AAA 10 2 XXX 0 4 YYY 0 としたいです。

  • SQL文について

    Select文についての質問です。 テーブルA,B, Cがります。  Aテーブルのカラム A1,A2, A3  Bテーブルのカラム B1, B2, B3  Cテーブルのカラム C1,C2, C3 A1=B1,A2=B2の  A3,B3 と、 A1=C1でC3がNULLでないCテーブルの件数 を一度に取得したい場合、どのようなSQL文になるでしょうか。 よろしくお願いします。

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

  • SQL

    以下のような売上テーブルから、 「2009年のデータ」と「2008年と比較した2009年の売上数の増減」を 取得したいです。(商品の昇順で) 取得できるSQL文を教えていただきたいです。 どうぞよろしくお願いいたします。 <売上テーブル> 年, 商品, 売上数 --------------- 2008, A, 30 2008, B, 20 2008, C, 20 2009, A, 10 2009, C, 40 2009, D, 50 <結果>↓ 商品, 2009年の売上数, 増減 ------------------------- A, 10, -20 B, , -20 C, 40, 20 D, 50, 50

  • SQLの書き方(チェックボックス)

    このスレでいいのかちょとわからなかったのですが、 SQLの書き方のなのでこちらで質問をさせて頂きます。 (VB.NET) □ A □ B □ C チェックボックス(A,B,C)があります。 例えば(A、B,C)どれか一つ選択された場合 SELECT文でテーブルA、B、Cからデータを抽出するイメージは わくのですが、チェックボックスで(A、C)など複数 選択された場合には、SELECT文でテーブルAを抽出し 終わった後、SELECT文でテーブルCを抽出するのは 問題があるのではないかと思います。 ただイメージがわきません…。ヒントでもいいので もしよろしければアドバイスよろしくお願い致します。

  • こんなSQLを教えてください

    こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1|  a| | 2|  b| | 3|  c| テーブル2 |キー|コード| | 2|  B| | 4|  D| <更新後> テーブル1 |キー|コード| | 1|  a| | 2|  B| | 3|  c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください