2 つの製品テーブルがあります。テーブル A は「デフォルト」のテーブルです (データ フィードから取得され、毎週自動的に更新されます)。テーブル B は、テーブル A の値を手動で上書きするために使用され、テーブルと同じ列に加えていくつかの列があります。両方のテーブルには常に同じ UniqueID 列があります。
A からのすべての値と B からのすべての値をプルする select ステートメントが必要です。B からの値が null でない限り、B は A からの値を上書きします。 "0" で埋められています)。
LEFT JOIN を使用してみましたが、null 値と「0」値に問題があります。
私はphpでデータを使用しており、1行だけを取得する必要がある場合に処理できます。それぞれに対してクエリを実行し、A の連想配列を抽出し、B 配列をフィルター処理してから抽出します。しかし、20 ~ 200 行を取得し始めると、そのプロセスは非常に扱いにくくなります。
テーブル A には約 400,000 行があり、B が 10,000 ~ 20,000 を超えることはありません。
ご協力いただきありがとうございます。
更新:これが私が仕事をするようになったコードです。
SELECT a.UniqueId,
IF(b.Color, b.Color, a.Color) as Color,
IF(b.Price1 = 0, a.Price1, b.Price1) as Price1,
b.SPrice1
FROM productdata a LEFT JOIN product_overrides b ON a.UniqueID = b.UniqueID WHERE a.UniqueID = $prod";
更新 2: シンプルな方が良いです。IF() はヌルとゼロの両方に対応します。
IF(expr1,expr2,expr3)
expr1 が TRUE ( expr1 <> 0 および expr1 <> NULL ) の場合、IF() は expr2 を返します。それ以外の場合は expr3 を返します。IF() は、使用されるコンテキストに応じて、数値または文字列の値を返します。
SELECT a.UniqueId,
IF(b.Color, b.Color, a.Color) as Color,
IF(b.Price1, b.Price1, a.Price1) as Price1,
b.SPrice1
FROM productdata a LEFT JOIN product_overrides b ON a.UniqueID = b.UniqueID WHERE a.UniqueID = $prod";