• ベストアンサー

2つのテーブルからデータを抽出

同じ列が存在する2つのテーブルがあります。 その2つのテーブルの同じ列同士を突き合わせ、 同じ条件の値を表示したいのですが、 SQL文で可能なのでしょうか? 例: 条件としてテーブル1、テーブル2の列Aが3以下の数字すべて テーブル1 列A ― 1 1 2 3 4 5 テーブル2 列A ― 1 2 2 3 3 3 3 4 4 5 ほしい結果 A|A ―― 1|1 1| 2|2  |2 3|3  |3  |3  |3 不躾な質問で恐縮ですが、 アドバイスお願いいたします。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQL Server 2005以降ならば、以下の通りです。 SELECT t1.A,t2.A FROM (SELECT ROW_NUMBER() OVER (PARTITION BY A ORDER BY A) SEQ,* FROM テーブル1 WHERE A<=3) t1 FULL OUTER JOIN (SELECT ROW_NUMBER() OVER (PARTITION BY A ORDER BY A) SEQ,* FROM テーブル2 WHERE A<=3) t2 ON t2.A=t1.A AND t2.SEQ=t1.SEQ

cinquecent
質問者

お礼

早速のアドバイスありがとうございます。 FULL OUTER JOIN と言うものがあるんですね。 勉強になりました。 有難うございました。

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

関連するQ&A

  • 2つのテーブルに差異があるデータを抽出する方法

    このようなことが実現できるのかというご相談です。 ご存知の方がいらっしゃいましたらご教授ください。 環境はSQL Server2008です。 2つのテーブルがあります。 1度のSQLでその2つを比較し、以下の条件のデータを抽出することは可能なものでしょうか? (1)テーブルAに存在するが、テーブルBにはない (2)テーブルBに存在するが、テーブルAにはない (3)テーブルAとBの両方に存在するが、項目のいずれかが異なる。 なお、テーブルBには、テーブルAには存在しない項目がありますが、 その項目は比較対象外です。 お知恵を拝借できましたら、とてもありがたいです。 よろしくお願いいたします。 ■テーブルA Key Komoku1 Komoku2 001 1000 2000 002 2000 3000 005 3000 4000 006 4000 5000 ■テーブルB Key Komoku1 Komoku2 Komoku3 001 1000 2000 X1 003 2000 3000 X2 005 3000 5000 X3 006 4000 5000 X4 ■結果 Key Komoku1 Komoku2 002 2000 3000 003 2000 3000 005 3000 4000 (あるいは 005 3000 5000) ※005はテーブルA,B両方には存在するが、koumoku2の値が違う例です。 その場合、どちらのテーブルの値を出力しても構いませんし、あるいは両方を 出力しても構いません。 よろしくお願いいたします。

  • 2つのテーブルから条件に一致しないデータ抽出

    2つのテーブルから条件に一致しない行のみ抜き出しCSV か他のテーブルに抜き出す処理を作ろうと思っています。 そこで質問なのですが、以下の2つのテーブルから 条件に一致しないコードのみ抜き出すSQL文などありますか? ----------------------------------------- マスターテーブル コード、ネーム1、ネーム2、店コード 1、あ、い、6 2、う、え、8 3、お、か、4 4、き、く、2 店コードテーブル 店コード、店区分 1、スーパー 2、コンビニ 3、デパート 4、ホームセンター ------------------------------------------ 条件は、マスターテーブルの店コードが店コードテーブルに存在 しないデータのみ抽出です。 抽出結果は、以下の様にしたいです。 1、あ、い、6 2、う、え、8 このような考え大丈夫でしょうか? SELECT * FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S ON M.店コード = S.店コード わかりずらい質問ですがよろしくお願いします。

  • 等しくないデータの抽出

    テーブル1のフィールドa テーブル2のフィールドa を比較してテーブル1のフィールドaの中にテーブル2のフィールドaと中と重ならないものをだしたいのですが、SQLはどう書けばいいでしょうか。 (例題は数値ですが実際は文字列です) テーブル1 A 1 2 3 4 5 6 7 8 9 10 テーブル2 A 1 2 3 4 5 結果 6 7 8 9 10

  • 1つのテーブルからのデータ取得

    お世話になります。 Table1にはA,Bのフィールドがあり 例えば A=01のレコードを取得(取得するフィールドはA,B) このレコードを(1)とする。 Table1のうち、Aが(1)のBと一致する レコードを(2)とする。 Table1のうち、Aが(2)のBと一致する レコードを(3)とする。 N番目のBと一致するTable1のAがなくなるまで 上記を繰り返す。 (1),(2),(3)・・・の A,Bの値を取得するためには どういうSQL文を書けばいいでしょうか? 例:ここでA=01を設定する テーブル例と結果 Table1 A: B 01:02 取得 02:04 取得 02:05 取得 03:04 X 04:06 取得 05:10 取得 07:11 X 10:15 取得 以上お教えください。よろしくお願いします。

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • 重複データを含むSQL抽出方法

    sqlserver2008で、以下のようなテーブルから、全体のレコード件数を取得したいと思います。 但し条件として、 ・b列とc列が重複しているものは、d列の最新の日付のものを残す。 ・b列が同じものはそのままカウント ・c列が同じものはそのままカウント a列|b列 |c列 |d列 ---------------------------- 1|host1 |100 |2010/10/01 2|host2 |101 |2010/10/01 3|host3 |102 |2010/08/01 4|host3 |102 |2010/10/01 5|host4 |104 |2010/10/01 6|host5 |104 |2010/10/01 7|host5 |105 |2010/09/01 8|host6 |106 |2010/08/01 9|host6 |106 |2010/10/01 10|host7 |107 |2010/10/01 上記の条件実行し、以下のような結果(件数)を求めたい場合どのようなSQLになりますでしょうか。 a列|b列 |c列 |d列 結果(8件) ---------------------------- 1|host1 |100 |2010/10/01 ○ 2|host2 |101 |2010/10/01 ○ 3|host3 |102 |2010/08/01 4|host3 |102 |2010/10/01 ○ 5|host4 |104 |2010/10/01 ○ 6|host5 |104 |2010/10/01 ○ 7|host5 |105 |2010/09/01 ○ 8|host6 |106 |2010/08/01 9|host6 |106 |2010/10/01 ○ 10|host7 |107 |2010/10/01 ○ select文の中にselect文を使ったりするのでしょうか。 内部結合などイマイチ理解できていないためよろしくお願いします。

  • データ抽出SQLについて

    以下の様なテーブル内容のデータがあり、抽出条件:項目Aが同一でかつ、その項目Aに対する項目Bの値がひとつでも異なっている項目Aを抽出するSQLについて教えてもらえないでしょうか。よろしく御願い致します。 <データの内容> 項目A 項目B 0001 A 0001 A 0002 A 0002 B 0003 C 0003 A 0003 A 0004 B 0004 B 0004 B 0004 B <抽出結果> 0002 0003

  • 片方のテーブルにないデータを取り出す

    お世話になります。 SQL文についてちょっと助けてください。 テーブルA Aキー(主) テーブルB Bキー(主) Aキー テーブルBからBキーを取り出すとき、AキーでテーブルAを見に行って存在しない場合のBキーだけを取り出したいのです。 一度のSQL発行で可能でしょうか。

  • テーブルデーターの展開方法について

    MySQL5を利用しております 下記のような縦展開のテーブルから横型のテーブルへデーターを 展開したい場合 どの様なSQL文を使用したら良いかご教示願えな いでしょうか よろしくお願いいたします 1・縦型テーブル       |列1     |列2 -------------------- レコード1| カテゴリ1  |100 レコード2| カテゴリ2  |200 上記1のテーブル内、"100"と"200"の値を項目1に入っているカテゴリ 分類を利用し横型のテーブルへ1つのレコードとしてSQLで格納したいと 思っております 2・横型テーブル       |列3(カテゴリ1) | 列4(カテゴリ2) ---------------------------- レコード1| 100      | 200 自分で調べた限り insert文とupdate文を利用し1つ1つ 更新する方法以外思い浮かびません どなたかご教示の程 何とぞ 宜しくお願い致します

    • ベストアンサー
    • MySQL
  • 2つのテーブルの項目の和が求まりません。

    以下のA、Bを結合して期待する結果を得たいのですが、 4時間、試行錯誤してもできませんでした(><) 制約条件:サブクエリーの有無は問いません。 ■テーブルA a b ---- 1 2 2 1 ■テーブルB a b ---- 1 1 3 7 ■期待する結果 a cnt ---- 1 3 2 1 3 7 aはキーですがAのみ、Bのみ、両方に存在することがあるので、 簡単そうでかなり難しいようです。。 うぅ。。オラクルのSQL入門をなくしてしまったのが痛いです。 難しいSQLがさっと書けるようになるお勧めなSQL本ありましたら 教えてほしいです。よろしくお願いします。

    • ベストアンサー
    • MySQL
このQ&Aのポイント
  • ハガキを印刷する際にA4用紙に印刷される問題や、手差しでのテストプリントが絡まって出てこない問題が発生しています。
  • 背面を開けることでテストプリントは出せるものの、印刷するとスキャナーエラーが何度も表示される状況です。
  • 店頭ではこのエラーが頻繁に発生しており、解決策を求めています。
回答を見る