Обновить столбец SQLite текстом максимальной длины из той же строки - PullRequest
0 голосов
/ 29 марта 2020

У меня есть (Android) таблица SQLite с двумя столбцами, Col1 и Col2, содержащие текст. Я хочу обновить Col1, чтобы он содержал текст с максимальной длиной из Col1 и Col2 из той же строки. У меня уже есть рабочий запрос, но этот запрос выполняется довольно долго для большого набора данных.

Пример данных:

| Col1 | Col2 | ...
---------------
| AB   | A    |
| A    | ABC  |
| AB   | ABCD |

Ожидаемый результат обновления:

| Col1 | ...
--------
| AB   |
| ABC  |
| ABCD |

Рабочий (но медленный и трудный для чтения) запрос:

UPDATE table
SET Col1 = (
    SELECT Col2
    FROM table AS innerTable
    WHERE table.ROWID = innerTable.ROWID)
WHERE length(Col1) < length(Col2)

Я в основном ищу что-то подобное без вложенных запросов:

UPDATE table SET Col1 = maxLengthString(Col1, Col2)

Есть ли у меня какая-либо существующая функция упускать из виду? Обратите внимание, что это SQLite, поэтому я не могу использовать CREATE FUNCTION.
Спасибо за вашу помощь!

1 Ответ

1 голос
/ 29 марта 2020

Я думаю, что это так просто:

update tablename
set col1 = col2
where length(col2) > length(col1);

Будут обновлены только строки, длина которых col1 меньше длины col2. Смотрите демо . Результаты:

| Col1 | Col2 |
| ---- | ---- |
| AB   | A    |
| ABC  | ABC  |
| ABCD | ABCD |
...