Я получаю вышеупомянутую ошибку при попытке выполнить запрос update. См. схему ниже для справки.
Цель запроса состоит в том, чтобы обновить строку заглавной буквы таблицы клиента, чтобы она совпадала со строкой продажи таблицы вычислений, если у клиента есть вычисление. Если это не так, значение капитала должно быть равно 0. Я попробовал следующий запрос, и появилось сообщение об ошибке, упомянутое в заголовке.
UPDATE client
SET capital = (
SELECT
CASE
WHEN client_compte.compte_num IS NOT NULL THEN client.capital = compte.solde
ELSE 0
END
FROM compte
JOIN client_compte ON compte.compte_num = client_compte.compte_num
JOIN client ON client_compte.client_id = client.client_id);
Any help solving this error?


Сообщение кажется вполне ясным — типы столбцов не совпадают. Однако ваш update искажен из-за двух ссылок на client. Предположительно, вы намерены:
UPDATE client cl
SET capital = (CASE WHEN cc.compte_num IS NOT NULL
THEN cc.solde
ELSE 0
END)
FROM client_compte cc JOIN
compe c
ON c.compte_num = cc.compte_num;
WHERE cc.client_id = cl.client_id;
Это исправляет ошибку, но это не совсем то, что вам нужно. Я думаю, что коррелированный подзапрос лучше:
UPDATE client cl
SET capital = COALESCE((SELECT cc.solde
FROM client_compte cc JOIN
compte c
ON c.compte_num = cc.compte_num
WHERE cc.client_id = cl.client_id
), 0
);
@SkippyDingleChalk . . . Это та же идея, но с обратными именами таблиц.
да, это работает после удаления лишнего; в строке ON. В противном случае генерировал синтаксическую ошибку.
Я исправил первую строку моего SQL-запроса. Мне нужно обновить таблицу
client, а не таблицуcompte. Кроме того, мы еще не выучили аргументcoalesce. Есть ли способ сделать это без аргументаcoalesce?