• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日付の前後関係で2つのテーブルを結合したい)

日付の前後関係で2つのテーブルを結合したい

root139の回答

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

#1 です。 とりあえず、Access でも動く事は動いたようですね。 > 契約年月日の比較を優先し、1レコードに絞り込めなかった場合に基本SEQで比較したいのです。 なるほど。では、基本契約年月日が同じで基本SEQの大きなものが無いという条件に書き換えてみてはどうでしょうか。 変更したのは EXISTS() の中の WHERE 句です。 SELECT * FROM 契約明細 km INNER JOIN 契約基本 kk ON(km.契約番号 = kk.契約番号 AND kk.基本契約年月日 <= km.明細契約年月日) WHERE NOT EXISTS(SELECT * FROM 契約基本 kk2 WHERE kk2.契約番号 = km.契約番号 AND kk2.基本契約年月日 <= km.明細契約年月日 AND (kk.基本契約年月日 < kk2.基本契約年月日 OR kk.基本契約年月日 = kk2.基本契約年月日 AND kk.基本SEQ < kk2.基本SEQ)) ORDER BY 明細契約年月日;

k28484
質問者

お礼

再度ご回答いただき、ありがとうございます。 期待通りの結果を得ることができました。 EXISTS句はこれまで使ったことがなかったので 一見かなり難解なSQL文に見えたのですが、 こういう使い方があるんだな、 と大変勉強になりました。 今回いただいたご回答を参考に今後はEXSITS句も 積極的に使えるようになりたいと思います。 どうもありがとうございました。

関連するQ&A

  • 親子関係を持つテーブルから子テーブルの最新レコードを取得する方法について

    親子関係を持つ2つのテーブルから データを取得する方法について質問があります。 下記の2つのテーブルがあったとします。 契約基本(A) 【契約番号】【契約名】 K0001    契約名1 K0002    契約名2 K0003    契約名3 契約明細(B) 【契約番号】【契約種別】 【金額】【契約年月日】 K0001    S1     1000  2005/12/01 K0001    S2     2000  2005/12/02 K0001    S3     3000  2005/12/03 K0002    S1     4000  2005/12/23 K0002    S2     5000  2005/12/22 K0002    S3     6000  2005/12/21 K0003    S1     7000  2005/12/10 K0003    S2     8000  2005/12/12 K0003    S3     9000  2005/12/11 この2つのテーブルを結合して、 契約基本・契約番号毎に最も契約明細・契約年月日が 新しいレコードを取得して下記のような 取得結果を得たいと思っています。 A.K0001,A.契約名1,B.K0001,B.S3,B.3000,B.2005/12/03 A.K0002,A.契約名2,B.K0002,B.S1,B.4000,B.2005/12/23 A.K0003,A.契約名3,B.K0003,B.S2,B.8000,B.2005/12/12 これを1本のSQLで実現する場合、 どのような方法が良いのでしょうか? データベースはOracle9iを使用しています。 恐らく既出の質問だとは思いますが どのようなキーワードで検索して良いのかわからず 質問させてもらいました。 お手数をおかけしますが よろしくお願いします。

  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • アクセス 結合プロパティ が正しく結合されない(アクセス初心者です)

    請求明細テーブルと、支払明細テーブルの指定伝票番号で結合して、 請求明細テーブルの全レコードと、支払明細テーブルの請求明細テーブルと一致するレコードだけを表示させたく、結合プロパティをそのように設定しました。 SQLは、下記のようになりました。 select 請求明細.指定伝票番号, 請求明細.計 from 請求明細 left join 支払明細 on 請求明細.指定伝票番号=支払明細.指定伝票番号 すると、思わぬことがおきました。 請求明細テーブルの全レコードが表示されず、一部欠落してしまいました。 同じような質問をしている人の、回答を見させていただいたところ、上記のSQLで合っているようでした。 一体なにが起きているんでしょうか??教えてください。

  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL
  • テーブル結合について

    テーブルの結合についてお聞きしたいことがあります。 カラム「KEY」を結合条件に テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。 しかし、テーブルAにBとCをLEFT JOINを結合した所、 【取得された結果】のデータが取得されました。 どのような結合をしたら期待通りの結果が得られるのでしょうか? 回答宜しくお願いします。 【取得された結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 B-1 C-2 A-1 B-1 C-3 2 A-2 3 A-3 【取りたい結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 C-2 A-1 C-3 2 A-2 3 A-3 【テーブルA】 key dataA --------------------- 1 A-1 2 A-2 3 A-3 【テーブルB】 key dataB --------------------- 1 B-1 【テーブルC】 key dataC --------------------- 1 C-1 1 C-2 1 C-3

  • 内部結合のSQL文

    次のような条件でのSQL文はどのように書けばよいのでしょうか? 売上テーブル(フィールドは「売上No.」)と売上明細テーブル(フィールドは「売上No.」「行番号」)を内部結合します。 結合の条件は売上明細テーブルの売上No.が売上テーブルの売上No.と等しいもの、かつ売上明細テーブルの行番号の一番小さいもの、です。 行番号はユニークですが、必ずしも1から順に振られているとは限りません。 どうぞよろしくお願いします。

  • テーブルの結合について

    テーブルの結合について あるテーブルのサブクエリAがあるとして 抽出条件違いのサブクエリA’を 結合条件無しで(クロス結合で)、外部結合したいのですが そのようなことは可能でしょうか? サブクエリAのデータは残したいのです。 よろしくお願いします。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • 固定値を含む結合と複数テーブルの結合について

    「1.固定値を含む結合」と「2.複数テーブルの結合」について教えて下さい。 最近oracleを使い始めてSQLで表の結合を書く場面があるんですが LEFT(RIGHT) JOIN を使うのか、(+)を使って書くのかで迷っています。 LEFT(RIGHT) JOINだと固定値を含めて外部結合しようとするとエラーになってしまいます。 それが嫌で(+)を使っていたんですが 今度は複数のテーブルを(+)で結合しようとするとエラーになってしまいます。 (AテーブルとBテーブル、AテーブルとCテーブルなど?) こういう場合はどうすれば良いのでしょうか? とりあえず副参照をFROMに指定して対処してるんですが 何かきちんとした書き方があるのでしょうか?誰か教えて下さい。