SQLite:从SELECTWHERE查询创建blobs表
是否有一种相当快速的方法将sqlite数据库表转换为另一个表,其中一列中共享相同值的所有行都被追加到一个字符串中,并存储为blob 比如:SQLite:从SELECTWHERE查询创建blobs表,sqlite,blob,converters,Sqlite,Blob,Converters,是否有一种相当快速的方法将sqlite数据库表转换为另一个表,其中一列中共享相同值的所有行都被追加到一个字符串中,并存储为blob 比如: INSERT INTO new VALUES(<id>,blob) WHERE blob IN (SELECT blobber(*) FROM old WHERE id=<id>); 我必须补充一点,这不是唯一的,因为每个相同的实体可以有多个特性。因此,blobber中的序列化需要两个不同的分隔符。我相信以下内容可能符合您的要求:-
INSERT INTO new VALUES(<id>,blob) WHERE blob IN (SELECT blobber(*) FROM old WHERE id=<id>);
我必须补充一点,这不是唯一的,因为每个相同的实体可以有多个特性。因此,blobber中的序列化需要两个不同的分隔符。我相信以下内容可能符合您的要求:-
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查询中的原始表:-
在新表二次选择查询时:-
补充再评论
因此,不可能使用一行将多行强制转换为一个blob 和一个列分隔符?或者通过构建一个中间表 如上所述,然后将同一id的所有ALLCOL转换为另一个id 桌子是全排的吗 是的,这是可能的,例如id列是multiple rows列。聚合函数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行
对于id=1的两行,为1,
id=2的3行中为1,
id=3的两行中的1
id为4的单行为1
根据:-
什么是blobber?在其中一列中共享相同值的所有行都被追加到一个字符串中,并存储为blobber。可以添加分隔符,使用| |符号时?@RadioControlled yes,例如col1 | |':“| | col2 | |':“| | col3表示冒号分隔符。因此,不可能使用行分隔符和列分隔符将多行强制转换为一个blob?或者,通过如上所述构建一个中间表,然后将同一id的所有allcol强制转换到另一个表的allrows?@RadioControlled,这是可能的,答案中添加了一个示例。