2017-09-20 9 views
0

日付間隔を指定するレコードを持つ2つのテーブルがあります。テーブルには2つのフィールドが共通しています。インターバルフィールドは、両方のテーブルで使用される2つのフィールド(from/to)で表されます。私は、共通のフィールドとオーバーラップ間隔に基づいてそれらを結合したい:重複する時間間隔に基づいてテーブルを結合する

Joining two tables with diff intervals

私はこれをどのように行うことができますか?私はテーブル1のすべてのレコードを必要とし、テーブル2の間隔と重複があった場合は、結果に追加する必要があります。

+1

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品をお使いですか? Postgres?オラクル? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557と承認された回答 –

+0

あなたのタイトルは**時間間隔**を重複しています。あなたの説明には**日付間隔の重複**とデータベース構造**の深度間隔の重複**が含まれます。たぶんこれはあなたも同様に整理する必要がありますか? –

答えて

0

あなたは日付が重なって表現した状態で外部結合を使用することができます。

select t1.*, 
      t2.depth_from as from2, t2.depth_to as to2, t2.code as code2 
from  table1 t1 
left join table2 t2 
     on t1.DataSet = t2.DataSet 
     and t1.HoleID = t2.HoleID 
     and t1.Depth_From < t2.Depth_To 
     and t1.Depth_To > t2.Depth_From 
0

は、2つの共通フィールド上のテーブルを結合して、完全または部分的があるレコードだけに結果を制限します奥行き範囲の重なり。どのRDBMSを使用しているかを指定していないため、それに応じて変更する必要があります。

SELECT 
     t1.* 
    , t2.Depth_From AS DFrom 
    , t2.Depth_To AS DTo 
    , t2.Code AS Code 
FROM 
    table1 AS t1 
    LEFT JOIN table2 AS t2 
     ON t1.DataSet = t2.DataSet 
      AND t1.HoleID = t2.HoleID 
WHERE 
     (t1.Depth_From <= t2.Depth_From AND t1.Depth_To >= t2.Depth_To) 
    OR (t1.Depth_From >= t2.Depth_From AND t1.Depth_To <= t2.Depth_To) 
    OR (t1.Depth_From < t2.Depth_From AND t1.Depth_To > t2.Depth_From) 
    OR (t1.Depth_From < t2.Depth_To AND t1.Depth_To > t2.Depth_To); 
関連する問題