• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL SELECT文の書き方)

SQL SELECT文の書き方

このQ&Aのポイント
  • 3つのテーブルから特定の表示内容を取得するためのSQL SELECT文の書き方について教えてください。
  • 所有者テーブル、土地テーブル、家屋テーブルのデータを結合して、特定の画面表示内容を取得する方法について教えてください。
  • 画面表示内容に該当するデータが存在しない場合、空白として表示する方法について教えてください。

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

土地テーブルと家屋テーブルは、同一所有者IDで同一取得日で複数のレコードがあってもおかしくない はずだけれども、テーブルの項目がないので、ないと仮定しましょう。 (あったら以下のSQLではうまく結果はでません。) select a.所有者ID,a.所有者名 as 名前,b.土地取得日,b.面積,c.家屋取得日,c.延床面積 from 所有者テーブル a, (select b2.所有者ID,b2.取得日 as 土地取得日,b2.面積, ROW_NUMBER() OVER(PARTITION BY b2.所有者ID ORDER BY b2.取得日 DESC) as No from 土地テーブル b2) b full outer join (select c2.所有者ID,c2.取得日 as 家屋取得日,c2.延床面積, ROW_NUMBER() OVER(PARTITION BY c2.所有者ID ORDER BY c2.取得日 DESC) as No from 家屋テーブル c2) c on b.所有者ID = c.所有者ID and b.No = c.No where a.所有者ID = case when b.所有者ID is null then c.所有者ID else b.所有者ID end という感じでできるはずです(未検証)

RISEMYZK
質問者

お礼

Siegruneさん、ありがとうございました。簡単ですが、確認したところレイアウトとおりに表示されました。詳細確認は別途実施します。ROW_NUMBERで紐付を作り、FULL OUTER JOINですか~。

その他の回答 (3)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

> 土地テーブルの 1,11/24,30 と家屋テーブル 1,11/25,30は > 紐づいていません。所有者IDでくくられているだけです。 ということは, 土地テーブル 所有者ID,取得日,面積 1,11/22,100 1,11/24,30 1,11/26,150 の3行と 家屋テーブル 所有者ID,取得日,延床面積 1,11/25,30 1,11/30,12 の2行との対応づけは,任意でかまわないということでしょうか。 任意ではなく質問文のような対応づけでなければならないのなら,そういう対応づけになる規則は何なのでしょう。

RISEMYZK
質問者

補足

要求としては、所有者毎の土地(取得日付降順)と家屋(取得日付降順)を横並びで画面リストに表示してほしいということのみです。実現方式として、SQLのSELECT文ではたして実現可能なのか。可能であればサンプルを参照したい。実現不可ならば次の方式を考えようと思ってます。SELECT文で可能なのか判断できなかったので投稿しているいだいです。

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

土地テーブルの 1,11/24,30 と家屋テーブル 1,11/25,30 が1レコードになる条件(直接的な紐づきでないとしても)が分からなければ、 どうやったって実現できないと思います。 お役にたてず申し訳ないです。

RISEMYZK
質問者

お礼

実現可否の判断をしていただいて、とても助かりました。 次の案を考えます。ありがとうございました。

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

この情報だけでは無理な気がします。 土地テーブルと家屋テーブルの関連が分かりません。 どうして土地テーブルの 1,11/24,30 と家屋テーブル 1,11/25,30 が紐づくのでしょうか?

RISEMYZK
質問者

補足

土地テーブルの 1,11/24,30 と家屋テーブル 1,11/25,30は紐づいていません。所有者IDでくくられているだけです。このようなデータ内容で画面表示内容を作成するのは、SQLのSELECT文では無理でしょうか。 無理な場合、たとえばストアドプロシージャなら可能でしょうか?。この仕様を提示された時にSELECT文だけで可能か判断できず投稿させていただきました。

関連するQ&A