これを説明するのは難しいので、最善を尽くします。
NULL
specificSiteID
デフォルト行 ( a で示される) とオーバーライド行 (NON- で示される)で構成されるテーブルがありますNULL
specificSiteID
。
どちらのタイプの行genericID
も、ロードされるデータを決定するために使用されます。場合によっては、一部のデータにデフォルトがない場合があります。
編集 1:私が参照する非 null specificSiteID
s は、それらの siteID が私が照会しているものと一致する場合にのみ、デフォルトをオーバーライドします。すべてのオーバーライドを 1 つのデフォルトに適用するわけではありませんspecificSiteID
。 のオーバーライドのみをデフォルトに適用します。
編集終了 1
このクエリには 4 つの要件があります。
- デフォルトも行固有のオーバーライドもない場合は、データを返しません。
- デフォルトデータがない場合にオーバーライドデータを返す
- オーバーライド データが null でないデフォルト データを上書きするオーバーライド データを返します。
- 最後に、デフォルト データが存在し、オーバーライド データがない場合は、デフォルト データのみを返します。
現在、私の SQL クエリは次のようになっています--
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
COALESCE(override.Col2, default.Col2) as Col2
FROM
(SELECT * from tableA where
genericID = 84 AND
specificSiteID IS NULL ) as default
LEFT JOIN
(SELECT * from tableA where
genericID = 84 AND
specificSiteID = 34 ) as override
ON default.genericID = override.genericID;
このスクリプトの問題は、ケース #2 がLEFT JOIN
. オンにするデフォルト行がない場合LEFT JOIN
、オーバーライド行は含まれません。 上記の例を使用すると、 is の場所に no genericID
= 84 がspecificSiteID
あるNULL
場合、オーバーライド データがあってもデータは返されません。
私は何JOIN
を探していますか?これを でカバーすることはできますJOIN
か?