У меня есть две таблицы продуктов.Таблица A является таблицей «по умолчанию» (поступает из данных автоматически обновляется еженедельно).Таблица B используется для ручной перезаписи значений в Таблице A и имеет те же столбцы, что и Таблица, плюс еще несколько.Обе таблицы всегда имеют одинаковый столбец UniqueID.
Мне нужен оператор выбора, который извлекает все значения из A и все значения из B, при этом B перезаписывает значения из A, ЕСЛИ МЕНЬШЕ значение из B равно нулю, = до 0 или равно 0,00 (набор столбцов установлен)целое число с двумя десятичными знаками и заполнено "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";