ОШИБКА: CASE типы integer и boolean не могут сопоставляться

Я получаю вышеупомянутую ошибку при попытке выполнить запрос 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?
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
505
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сообщение кажется вполне ясным — типы столбцов не совпадают. Однако ваш 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
                          );
    

Я исправил первую строку моего SQL-запроса. Мне нужно обновить таблицу client, а не таблицу compte. Кроме того, мы еще не выучили аргумент coalesce. Есть ли способ сделать это без аргумента coalesce?

SkippyDingleChalk 19.12.2020 03:56

@SkippyDingleChalk . . . Это та же идея, но с обратными именами таблиц.

Gordon Linoff 19.12.2020 04:03

да, это работает после удаления лишнего; в строке ON. В противном случае генерировал синтаксическую ошибку.

SkippyDingleChalk 19.12.2020 04:19

Другие вопросы по теме