• 締切済み

SQL文で教えてください

Left join と Right join の両方の機能をもった、一つのSQL文はどうしたらいいのでしょうか。 つまり、Left join は左側のテーブルを基準とし右にないものでも右の部分はNUllのままで抽出しますが、双方にあるものは統合して出力し、片方に無いものは、ない部分だけNullで、とにかく両方を抽出するというSQL文が書けないかと思案しています。

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

full outer joinではダメなのでしょうか。

tennor70
質問者

お礼

いろいろ試していろいろな人に聞いて、やっとできました。 SELECT A.*,B.* FROM (SELECT * FROM Atable WHERE 条件A) AS A FULL OUTER JOIN (SELECT * FROM Btable WHERE 条件B ) AS B ON A.keyfield = B.keyfield ありがとうございました。

tennor70
質問者

補足

postgresqlでfull outer join を使うと同じレコードが複数行抽出されてしまいます。 また、お詫びですが、まったく同じ趣旨の質問が過去にあり、回答されていました。 union を使うとのことで、これから試してみたいと思います。 ありがとうございました。

  • Kensyusei
  • ベストアンサー率30% (25/81)
回答No.1

結合列がNULLだった場合の条件を書き換えてやればいいんじゃないでしょうか? NVL(A_TABLE.X) = NVL(B_TABLE.X) AND (A_TABLE.X IS NOT NULL OR B_TABLE.X IS NOT NULL)

tennor70
質問者

お礼

早速のご返事ありがとうございます。しかし and で記述してあるせいか1行も抽出されません。 お詫びですが、まったく同じ趣旨の質問が過去にあり、回答されていました。 union を使うとのことで、これから試してみたいと思います。 ありがとうございました。

関連するQ&A

  • Access SQL文 について

    Access SQL文のLEFT JOIN句についてなのですが、2つのテーブルを表示することは可能なのですが、テーブルが3つ以上ある場合はどういう記述をすればいいのでしょうか?

  • SQL文を教えて下さい

    2つのテーブルを比較して、片方のテーブルにしかない データを検索したいのですが、どのようなSQL文に なるのか 教えて下さい。 下記の例だと、AテーブルとBテーブルの両方にあるデータ以外のデータを検索したいので、下記の結果になります。よろしくお願いします 期待される結果 003 さああ 004 いいい 005 ううう 例 Aテーブル 001 あいう 002 えおお  003 さああ 004 いいい 005 ううう Bテーブル 001 あいう 002 えおお 

  • ACCESS2007で、重複チェックSQL文改編

    ACCESS2007で、重複チェックのSQL文の改編方法について教えてください。 ●フィールド内容=|会社名|郵便番号|住所|電話番号|業種| テーブル1とテーブル2を比較して、この内、|電話番号|が (1)両テーブルに存在する= SELECT テーブル1.* FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号; (2)テーブル1のみに存在する= SELECT テーブル1.* FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号 WHERE (((テーブル2.電話番号) Is Null)); (3)テーブル2のみに存在する= SELECT テーブル2.* FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号 WHERE (((テーブル1.電話番号) Is Null)); 場合のSQL文が上記なのですが、この条件を |会社名|と|電話番号|の両方が一致する時(1a)(2a)(3a) と |会社名|と|電話番号|のどちらか一つが一致する時(1b)(2b)(3b) にソース改変するにはどうしたら良いでしょうか?(AND、ORを使うのだと思いますが、具体的配置位置が分かりません。。) PS1:この程度の事ならSQL文を書かずとも、ウィザードで処理できるのでしょうか? PS2:テーブル名が、[テーブル]とカッコ有る無し両パターン見ますが、どちらが正解なのでしょうか? PS3:SQL文内は、ワード間は、半角スペースに統一されているんでしょうか?それともスペース無しでもエラーは出ないんでしょうか?

  • 仕様が難しくてSQL文が作れません(新人プログラマ

    予約明細テーブルと貸出明細テーブルの2つがあります。 この2つのテーブルから以下の項目を抽出するSQL文がわかりません 貸出先:予約明細と貸出明細のうち直近(システム日付からの)の貸出先 ※予約明細と貸出明細には貸出期間開始日と貸出期間終了日があります。 貸出期間:上記明細の貸出期間(貸出先で抽出した貸出期間開始日、貸出期間終了日) 会場:予約明細の時のみ上記明細の会場 担当 上記明細の登録担当者 という項目を抽出するSQL文がわかりません 自分なりに考えた結果が以下のSQL文です。新人プログラマのため間違っていると思うので ご指摘願います。 SELECT 貸出先, 貸出期間開始日~貸出期間終了日 AS 貸出期間, 会場, 担当 FROM 商品 LEFT JOIN 予約明細 ON 商品コード = 商品コード (商品テーブルと予約明細テーブルは商品コードで結合します) LEFT JOIN 貸出明細 ON 商品コード = 商品コード (商品テーブルと貸出明細テーブルは商品コードで結合します) WHERE ここからがまったくわかりません。 SQL文だけでは抽出する事は不可能なのでしょうか VB.netで開発しているのですがVB側で処理しなければいけない 項目もありますでしょうか SQL文(とVB)のコードでのご回答宜しくお願いいたします。 環境 VB2005 SQLServer2005

  • SQL文について

    SQL文について 現在一度に検索ができずに困っているため質問します。 データベースに男性テーブルと女性テーブルがあります。 男性テーブル ・番号 ・名前 女性テーブル ・番号 ・名前 このテーブルより自分の父、母、母の父を表示させたいのですが SELECT 男性テーブル.名前, 女性テーブル.名前, (※母の父を表示させたい) FROM 男性テーブル, 女性テーブル WHERE 男性テーブル.番号=父の番号 AND 女性テーブル.番号=母の番号 このあと条件に (AND 男性テーブル.番号=母の父の番号) をつけることはできないためSQL文の書き方で困っています。 抽出データは複数なので※の部分にサブクエリを書くことができません。 何かよいSQLの書き方はありますでしょうか?

  • LEFT JOIN とRIGHT JOINの合体版のような結合方法。

    LEFT JOIN とRIGHT JOINの合体版のような結合方法。 使用DBはMySQL5.0.45です。 2つのテーブルの結合方式で、結合条件に合致しなかった場合、 両方のデータを結果セットに含めることはできますか? LEFT JOINだと、左側のテーブルのデータは結果に返ってきて、右側のデータはNULLになります。 RIGHT JOINだと、右側のテーブルのデータは結果に返ってきて、左側のデータはNULLになります。 これを「左側データあり右側NULL」「左側NULL右側データあり」というレコードを混ぜて結果として返したいです。 具体的には、 以下二つのテーブルがあるとします。 table : test1 value  id ------------------- ああ   3 いい   4 うう     5 table : test2 value  id -------------------- AAA   1 BBB   2 CCC   3 DDD   4 id を結合条件のキーとして、以下のような結果を得たいです。 NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL LEFT JOINだと以下の結果に、 SELECT * FROM test1 LEFT JOIN test2 ON test1.id=test2.id ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL RIGHT JOINだと以下の結果になってしまいます。 SELECT * FROM test1 RIGHT JOIN test2 ON test1.id=test2.id NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 以上、ご教示お願い致します。

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

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え

  • 【SQL】SELECT文

    こんにちは。OracleのSQLを勉強中の者です。 SELECT文について質問させてください。 下記のテーブルから購入フラグがすべて「1」のユーザ名を抽出したいのですが、SQL文をご教授いただけますでしょうか。 テーブル名:商品購入テーブル ユーザ名   商品名    購入フラグ ---------- ---------- -------------- 001      AAA       1 001      BBB       1 001      CCC       0 002      DDD       1 003      AAA       1 003      EEE       1 004      CCC       0 このテーブルからですと、002と003のユーザが抽出される形となります。 以上、よろしくお願いいたします。

  • SQL文の書き方(こんなこと出来ますか)

    テーブルA(ID、A,B,中身) テーブルa(A、コードの名前1) テーブルb(B、コードの名前2) ID、A、コードの名前1、B、コードの名前2、中身という風に結果を得たいのですが、Aがテーブルaに存在する、又はBがテーブルbに存在するものを出力したいのですがJoinが良く分かりません。aまたはbに存在しない時はコードの名前はNullにしたく、また抽出されテーブルAのレコードが重複しないようにしたいのですが、考えても分かりません。ご教授下さるようお願い致します。

    • ベストアンサー
    • MySQL
  • 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 よろしくお願いします。