Я считаю, что следующее может быть таким, как вы хотите: -
CREATE TABLE IF NOT EXISTS newtable AS SELECT id,CAST(col1||col2||col3 AS BLOB) AS allcols FROM oldtable;
- при условии, что в исходной таблице 3 столбца, а именно col1 , col2 и col3
- это без предложения WHERE как , где все строки, имеющие одно и то же значение в одном из столбцов , неясны / неоднозначны.
Рассмотрим следующий пример:
DROP TABLE IF EXISTS oldtable;
CREATE TABLE IF NOT EXISTS oldtable (id INTEGER PRIMARY KEY, col1 TEXT, col2 TEXT, col3 TEXT);
INSERT INTO oldtable (col1,col2,col3) VALUES
('','',''),('A','B','C'),('123','123','123'),('C','D','E'),('456','456','456'),
(x'00FF',x'01FE',x'02FD'),(x'00FF',x'00FF',x'00FF'),(x'00FF','ABC',x'FF00');
SELECT * FROM oldtable;
DROP TABLE IF EXISTS newtable;
CREATE TABLE IF NOT EXISTS newtable AS SELECT id,CAST(col1||col2||col3 AS BLOB) AS allcols FROM oldtable;
SELECT * FROM newtable;
Исходная таблица (первый запрос SELECT): -
Пока новая таблица (2-й запрос SELECT): -
Дополнительный комментарий
Так этоне возможно преобразовать несколько строк в один большой двоичный объект, используя строку и разделитель столбцов?Или, может быть, путем создания промежуточной таблицы, как указано выше, и последующего приведения всех аллоков для одного и того же идентификатора в стрелки другой таблицы?
Да, это возможно, например, в столбце id это столбец из нескольких строк.Агрегирующая функция group_concat в сочетании с предложением GROUP BY может использоваться следующим образом.: -
DROP TABLE IF EXISTS oldtable;
CREATE TABLE IF NOT EXISTS oldtable (id INTEGER, col1 TEXT, col2 TEXT, col3 TEXT);
INSERT INTO oldtable (id,col1,col2,col3) VALUES
(1,'','',''),(2,'A','B','C'),(1,'123','123','123'),(2,'C','D','E'),(3,'456','456','456'),
(2,x'00FF',x'01FE',x'02FD'),(3,x'00FF',x'00FF',x'00FF'),(4,x'00FF','ABC',x'FF00');
SELECT * FROM oldtable;
DROP TABLE IF EXISTS newtable;
CREATE TABLE IF NOT EXISTS newtable AS SELECT id,group_concat(CAST(col1||':'||col2||':'||col3 AS BLOB),'~') AS allcols FROM oldtable GROUP BY id;
SELECT * FROM newtable;
:
используется для разделения столбцов ~
используется для разделения строк
Выше приведено 4 строки
- 1 для 2 строк, где id = 1,
- 1 для 3 строк, где id = 2,
- 1 для2 строки, где id = 3
- 1 для одной строки с идентификатором = 4
Согласно: -