• ベストアンサー

二つの表の項目を比較して値を取得するSQL

kougashaの回答

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.4

Aに無くてBのみがある場合にも、対象として抽出したりする時には、下記のようなSQLも面白いかもね。 select b.name, b.price from a,b where a.name = b.name and b.price > a.price union select b.name, b.price from b where b.name not in (select a.name from a);   蛇足SQLでした。

関連するQ&A

  • ある条件でのSQLの取得方法について

    以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー   項目1 10     X 20     Y ・テーブルB キー  項目2  項目3 10     5    C 10     6    D 12     6    E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は  別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、  複数件あるかも知れません。  無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと  同じレコードに、項目2が同じデータの情報を出力します。  項目2が同じデータが無い場合はこの情報は出力しません。  項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー  フラグ   項目1  項目2  項目3   項目2が同じキー  項目2が同じ値 10  テーブルA   X 10  テーブルB         5    C 10  テーブルB         6    D        12            E 20  テーブルA   Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • SQLの取得方法について

    SQLの取得方法を考えてます。 テーブルA キー番号 利用フラグ  内容   1      1     りんご   2      0     みかん   3      0     なし   4      1     すいか   5      1     ぶどう 上記のような5件のデータがあるとします。 出力する時は、1件(縦もち=>横もち)にします。 キー番号が小さい順で、利用フラグが1の物を出力します。 利用フラグが1の物は最大でも3件しかありません。 その為、出力テーブルも3件分しかありません。 利用フラグが1の物が3件無い場合は、ある分だけ出力します。 上記データの時の出力結果想定 テーブルB キー番号1 内容1  キー番号2 内容2  キー番号3  内容3   1     りんご     4     すいか    5     ぶどう これをどのようなSQLで実現できるでしょうか? 方法がよくわかりません。

  • SQLで「結果同士」の比較をするには?

    SQLで「結果同士」の比較をするにはどのように記述したらいいのでしょうか? Ora10gです。 例えば、構成としてAテーブルは KY項目1_____KY項目2_____Int型データ とします Bテーブルも KY項目1_____KY項目2・・・ といったデータ構成だとします。 Bテーブルのデータを group by KY項目1, KY項目2でカウントした時の件数とAテーブルのInt型データの数が一致しているか比較したいのですが、どのようなSQLでできますでしょうか?

  • SQLを教えて下さい

    SQL文を教えて下さい 以下の2つのテーブルがあります。 TABLE1 --------------- ID,NAME,PRICE --------------- 1,部品A,100 2,部品B,200 3,部品C,300 TABLE2 --------------- ID,NAME,PRICE --------------- 1,部品Aのサブ1,1 1,部品Aのサブ2,2 2,部品Bのサブ1,5 2,部品Bのサブ2,5 --------------- SELECT TABLE1.NAME TABLE2.NAME TABLE1.PRICE TABLE2.PRICE WHERE TABLE1.ID = TABLE2.ID(+) TABLE2.PRICE = (SELECT MAX(?) ?) 期待する結果 ・TABLE1.NAME = 部品Aの場合 --------------- 部品A,部品Aのサブ2,100,2 ・TABLE1.NAME = 部品Bの場合 --------------- 部品B,部品Bのサブ1,200,5 TABLE1.NAME = 部品Cの場合 --------------- 部品C,,300, ・TABLE1のNAMEに、TABLE2のNAMEが関連付く(付かないものもある) ・外部結合とMAX関数を用いたい。 ・TABLE2のPRICEが大きい方を取得(同一の場合は、どちらかを取得)

  • SQLでデータを1件だけ取得したいのですが。

    SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA     テーブルB   値X           値X    値Y   1           1    20   2           2    NULL   3           2    60   4           2    70               4    NULL               4    NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------  値X    値Y  1    20  (1件の場合そのまま出力。1件がNULLでもそのまま出力)  2    70  (NULLではない最大の1件を出力)  3    NULL  (テーブルBになくても出力)  4    NULL  (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?

  • エクセルで選択した項目をマークする方法

    SheetBで選んだ項目を、SheetAの該当する項目の隣の列の四角を □から■になるように、数式を組みたいのです。 ・SheetA       A列  B列 1行目  □   りんご 2行目  □   みかん 3行目  □   ぶどう という表を作成しております。 SheetB       A列                                    B列 1行目  選択する果物を、B列のリストボックスより選んでください   {りんご,ぶどう、みかん} シートB列の (1,B)は、リストボックスで簡単に出来るのですが、 シートAの、(3、A)の、ぶどうを□から■にする方法がわからないのです。 当然、ぶどうの次に、りんごが選ばれれば、ぶどうは□、りんごを■にしたいのです。 解決方法をご存知の方がいらっしゃいましたら ご教授のほう宜しくお願いします。

  • データの全項目比較について

    いいやり方があれば、おしえてください。 テーブルA************** みかん おいしい 100個 静岡産 りんご 赤い   20個 青森産 きゃべつ 春物  10個 北海道産 テーブルB************* みかん まずい 30個 静岡産 りんご 赤い  20個 新潟産 このような二つのテーブルがあるとして、 検索によって、Aテーブルにないもの(きゃべつ)と、 さらにAテーブルとBテーブルの品物名は同じだけど、産地や個数や味評価がことなるものを取り出すSQL構文はありませんか? (紐付けは品物名でします) 希望する結果はこうです。 結果**** みかん おいしい まずい 100個 30個  NULL(等しいので) NULL りんご NULL  NULL NULL  NULL 青森産 新潟産 きゃべつ NULL 春物 NULL 10個 NULL 北海道産 NULL ちなみに、対象の項目は、本当は100個ほどあるのですが・・・。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文

    SQLの初心者です。 Aテーブル(a項目,b項目,c項目)とBテーブル(a項目,d項目,e項目)のテーブルがあります。 d項目順でAテーブルの項目のみ出力するにはどうしたらいいのでしょうか。 例えば次のSQL文ではd項目順で出力されますが結合の為、AテーブルとBテーブルの全項目が出力されます。 SELECT * FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 次のSQL文のようにAテーブルの項目を選択したらAテーブルの項目のみ出力する事はわかります。 SELECT a項目,b項目,c項目 FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 今回はAテーブルの項目数が少ないのでこれでもいいのですが、項目数が多くなると大変です。 上の様に項目を選択しないでAテーブルの項目を全て出力する事は可能なのでしょうか。 宜しくお願い致します。

  • SQLでの計算と値の集約について

    SQLについて、質問があります。 (質問) 以下のようなDBがあります。 【1のDB】 ID 品目 金額    日付 -------------------------------------------- 1   ミカン   1000    2007/11/1 1   オレンジ  2000    2007/11/1 1   レモン    100    2007/11/1 2   ぶどう   1500    2007/11/1 【2のDB】 区分  品目 金額    日付 ------------------------------------------- a    ミカン   1000    2007/11/1 a    オレンジ   500    2007/11/1 a    レモン    300    2007/11/1 a    ぶどう   1500    2007/11/1 b    ミカン    100    2007/11/1 b    オレンジ   200    2007/11/1 b    レモン    500    2007/11/1 b    ぶどう   2500    2007/11/1 条件。 1のDBの品目=2のDBの品目 やりたい事。 (1)2のDBの金額(区分=a)×1のDBの金額÷2のDBの金額(区分=b) (2)1のDBのIDで、(1)で得た計算結果を集約 上記DBで具体的に言うと、 1のDBのID=1(ミカン、オレンジ、レモン)のそれぞれの計算結果を計算 (ミカン) 1000×1000÷100=10000 (オレンジ) 500×2000÷200=5000 (レモン) 300×100÷500=30 計算結果を集計(ミカン+オレンジ+レモン) 10000+5000+30=15030 上記の作業をできれば、1回のSQLでやりたいと思うのですが、可能でしょうか? 1回のSQLでは不可能な場合、(1)番だけでもやりたいのですが・・・。 SQLのコーディングがよくわかりません。 ご教授をお願いします。

  • SQL初心者です。ご教授願います。

    SQL初心者です。ご教授願います。 テーブルAとテーブルBの比較をしたいと思っています。 比較するのは、全項目(もしくは、特定の項目でもかまいません)です。 どなたか、SQLのアドバイスをお願いします。  条件   ・DB: Microsoft SQLserver2000   ・テーブルAとテーブルBの項目は同じ(コピーして作られたもの)です。   ・比較は全項目です(キー項目の有無も含まれます)。