【发布时间】:2015-05-28 07:05:16
【问题描述】:
我需要将表中的一列拆分为新视图或表中的不同列,其中逗号分隔值。
目前对我来说最好的运行解决方案是
CREATE VIEW clearTable as select ID,Timestamp,s1,s3,s4,s5,s6,s7,s8,substr(s8r,1,instr(s8r,",")-1) as s9 from
(select ID,Timestamp,s1,s3,s4,s5,s6,s7,substr(s7r,1,instr(s7r,",")-1) as s8,substr(s7r,instr(s7r,",")+1) as s8r from
(select ID,Timestamp,s1,s3,s4,s5,s6,substr(s6r,1,instr(s6r,",")-1) as s7,substr(s6r,instr(s6r,",")+1) as s7r from
(select ID,Timestamp,s1,s3,s4,s5,substr(s5r,1,instr(s5r,",")-1) as s6,substr(s5r,instr(s5r,",")+1) as s6r from
(select ID,Timestamp,s1,s3,s4,substr(s4r,1,instr(s4r,",")-1) as s5,substr(s4r,instr(s4r,",")+1) as s5r from
(select ID,Timestamp,s1,s3,substr(s3r,1,instr(s3r,",")-1) as s4,substr(s3r,instr(s3r,",")+1) as s4r from
(select ID,Timestamp,s1,substr(s2r,1,instr(s2r,",")-1) as s3,substr(s2r,instr(s2r,",")+1) as s3r from
(select ID,Timestamp,s1,substr(s1r,1,instr(s1r,",")-1) as s2,substr(s1r,instr(s1r,",")+1) as s2r from
(select ID,Timestamp,cast(substr(payload,1,instr(payload,",")-1) as TIME) as s1,substr(payload,instr(payload,",")+1) as s1r from thebasetable))))))))
如您所见 - 每个分隔字符都有一个新的子查询级别。
结果是,我不会这样做,但我正在寻找更好的方法来到达那里 - 也许是一个更有效的解决方案。
作为一个工作示例,您可以使用this SQL Fiddle。
此外,我想提一下,目前数据存储在SQLite 中,但这可能会发生变化,因此无需仅针对SQLite 进行优化。
欢迎所有提示。
【问题讨论】:
-
SQLite 旨在嵌入到另一种语言中。
标签: sql sqlite subquery query-optimization