日付間隔を指定するレコードを持つ2つのテーブルがあります。テーブルには2つのフィールドが共通しています。インターバルフィールドは、両方のテーブルで使用される2つのフィールド(from/to)で表されます。私は、共通のフィールドとオーバーラップ間隔に基づいてそれらを結合したい:重複する時間間隔に基づいてテーブルを結合する
私はこれをどのように行うことができますか?私はテーブル1のすべてのレコードを必要とし、テーブル2の間隔と重複があった場合は、結果に追加する必要があります。
日付間隔を指定するレコードを持つ2つのテーブルがあります。テーブルには2つのフィールドが共通しています。インターバルフィールドは、両方のテーブルで使用される2つのフィールド(from/to)で表されます。私は、共通のフィールドとオーバーラップ間隔に基づいてそれらを結合したい:重複する時間間隔に基づいてテーブルを結合する
私はこれをどのように行うことができますか?私はテーブル1のすべてのレコードを必要とし、テーブル2の間隔と重複があった場合は、結果に追加する必要があります。
あなたは日付が重なって表現した状態で外部結合を使用することができます。
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
は、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);
どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品をお使いですか? Postgres?オラクル? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –
http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557と承認された回答 –
あなたのタイトルは**時間間隔**を重複しています。あなたの説明には**日付間隔の重複**とデータベース構造**の深度間隔の重複**が含まれます。たぶんこれはあなたも同様に整理する必要がありますか? –