Начнем с того, что синтаксис вашего оператора обновления неверен. В MySQL вам нужно что-то вроде UPDATE B JOIN A ON ... SET ...
.
Когда дело доходит до логики c, которую вы хотите реализовать, хотя и не совсем понятно, я подозреваю, что этим можно управлять с помощью выражений CASE
:
UPDATE B
JOIN A ON A.$uniqueField = B.$uniqueField
SET
B.col_1 = CASE
WHEN A.col_1 <> '' AND A.col_1 <> '0'
THEN A.col_1
ELSE B.col_1
END,
B.col_2 = CASE
WHEN A.col_2 <> '' AND A.col_2 <> '0'
THEN A.col_2
ELSE B.col_2
END,
...
B.col_N = CASE
WHEN A.col_N <> '' AND A.col_N <> '0'
THEN A.col_N
ELSE B.col_N
END
Для каждого столбца в предложении SET
запрос обновляет его до соответствующего значения в A
(если такая запись существует), если значение в A
не является пустым не null
и не 0
. Я предположил, что все столбцы имеют строковый тип данных (следовательно, '0'
вместо 0
в вашем псевдокоде), так как вы проверяете, что значения не являются пустыми строками.
Примечание: как указано в spencer7503, проверка на недействительность является избыточной: значения, которые удовлетворяют любому из двух условий неравенства, гарантированно не равны нулю.