Обновить столбец на основе записей других столбцов в SQLITE - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть таблица TRANSACTIONS в sqlite, и я добавил в нее новый столбец.Я хочу заполнить новый столбец на основе записей тех же строк.Например (приведенная ниже таблица не содержит фактических данных ...):

productId         brc                newColumn
   10032         10032-100101          32-A
   10231         10231-100102          231-B

Мне удалось получить желаемый вывод newColumn:

//The below statement gives me the newColumn result
select cast(substr(productId, 2, 5) as integer) || 
case 
    when cast(substr(brc, 37, 1) as integer) == 0 then ''
    when cast(substr(brc, 37, 1) as integer) == 1 then '-Α'
    when cast(substr(brc, 37, 1) as integer) == 2 then '-Β'
    when cast(substr(brc, 37, 1) as integer) == 3 then '-Γ'
    when cast(substr(brc, 37, 1) as integer) == 4 then '-Δ'
when cast(substr(brc, 37, 1) as integer) == 5 then '-Ε'     
END as newColumn
from TRANSACTIONS

Теперь,Я хочу обновить таблицу!Я попытался:

update TRANSACTIONS
set newColumn = (    
   select cast(substr(productId, 2, 5) as integer) || 
   case 
       when cast(substr(brc, 37, 1) as integer) == 0 then ''
       when cast(substr(brc, 37, 1) as integer) == 1 then '-Α'
       when cast(substr(brc, 37, 1) as integer) == 2 then '-Β'
       when cast(substr(brc, 37, 1) as integer) == 3 then '-Γ'
       when cast(substr(brc, 37, 1) as integer) == 4 then '-Δ'
   when cast(substr(brc, 37, 1) as integer) == 5 then '-Ε'      
   END from TRANSACTIONS
   )

where brc = brc; 

Но я получаю одинаковое значение во всех строках newColumn ... Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 14 сентября 2018

Вам не нужен внутренний select, так как вы хотите построить newColumn из данных в данной строке.

В других базах данных я видел, как такой запрос выдавал ошибку о "возвращении нескольких строк" (внутренним выбором). Не так в sqlite. Вероятно, он обновляет все строки значением из первой строки.

Другим способом исправить это будет псевдоним таблицы TRANSACTIONS в обоих местах и ​​добавление where t1.brc = t2.brc во внутреннее выделение. Но это заставляет базу данных выполнять больше работы, чем нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...