1

これを説明するのは難しいので、最善を尽くします。

NULL specificSiteIDデフォルト行 ( a で示される) とオーバーライド行 (NON- で示される)で構成されるテーブルがありますNULL specificSiteID

どちらのタイプの行genericIDも、ロードされるデータを決定するために使用されます。場合によっては、一部のデータにデフォルトがない場合があります。

編集 1:私が参照する非 null specificSiteIDs は、それらの siteID が私が照会しているものと一致する場合にのみ、デフォルトをオーバーライドします。すべてのオーバーライドを 1 つのデフォルトに適用するわけではありませんspecificSiteID。 のオーバーライドのみをデフォルトに適用します。 編集終了 1

このクエリには 4 つの要件があります。

  1. デフォルトも行固有のオーバーライドもない場合は、データを返しません。
  2. デフォルトデータがない場合にオーバーライドデータを返す
  3. オーバーライド データが null でないデフォルト データを上書きするオーバーライド データを返します。
  4. 最後に、デフォルト データが存在し、オーバーライド データがない場合は、デフォルト データのみを返します。

現在、私の 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か?

4

1 に答える 1

1

Mysql は完全結合をサポートしていないため、「左結合」+「右結合」を使用してシミュレートできます。

genericID 34 と specificSiteID 84 はその例だと思います。specificSiteId が null (デフォルト) で null でない (オーバーライド) すべての genericID を結合する必要がありますね。

SELECT COALESCE( override.Col1 , default.Col1) as Col1,
       COALESCE(override.Col2, default.Col2) as Col2
  FROM (SELECT * from tableA where specificSiteID IS NULL ) as default
        LEFT JOIN  (SELECT * from tableA where specificSiteID is not null ) as override
               ON default.genericID = override.genericID
UNION 
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
       COALESCE(override.Col2, default.Col2) as Col2
  FROM (SELECT * from tableA where specificSiteID IS NULL ) as default
        RIGHT JOIN  (SELECT * from tableA where specificSiteID is not null ) as override
               ON default.genericID = override.genericID

しかし、このクエリを見ると、あなたのDB設計はあなたのケースにより適していないようです

于 2011-02-04T23:52:47.263 に答える