これは説明が難しいので、最善を尽くします。MySQLのマージクエリーに参加する - 同じテーブルの2つの行を上書きまたはマージする
Iは、(非NULL
specificSiteID
Sによって示される。)は、デフォルトの行から成るテーブルを持っている(NULL
specificSiteID
によって示される)および行をオーバーライド
行の両方のタイプは、負荷のかかっているデータを決定するgenericID
を使用します - 一部のデータにはデフォルトがないことがあります。
編集1: Null以外のspecificSiteID
は、私が照会しているサイトIDとサイトIDが一致するときにデフォルト値を上書きするだけです。すべてのオーバーライドを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;
like--に見えるこのスクリプトの問題は#2が原因LEFT JOIN
に失敗したような場合です。 LEFT JOIN
のデフォルト行がない場合、オーバーライド行は含まれません。上記の例を使用して、 = 84の場合、specificSiteID
がNULL
の場合、オーバーライドデータがあってもデータは返されません。
どのような種類のJOIN
ですか? JOIN
でこれをカバーできますか?
のためのより適切ではないようだ、私は、DB側のプログラミングではなく、データの合体を扱うことにしました。 – SoreThumb