在SQLite列中拆分数据
我有一个类似以下内容的SQLite数据库:在SQLite列中拆分数据,sqlite,Sqlite,我有一个类似以下内容的SQLite数据库: ---------- ------------ ------------ | Car | | Computer | | Category | ---------- ------------ ------------ | id | | id | | id | | make | | make | | record | | model | | price
---------- ------------ ------------
| Car | | Computer | | Category |
---------- ------------ ------------
| id | | id | | id |
| make | | make | | record |
| model | | price | ------------
| year | | cpu |
---------- | weight |
------------
myCategory
表中的record
列包含一个逗号分隔的列表,其中列出了属于该类别的表名和项目id,因此条目如下所示:
车1、车2
我正在尝试拆分逗号上记录中的项目以获得每个值:
Car_1
Car_2
然后我需要更进一步,在\uu
上拆分,并返回汽车
记录
因此,如果我知道类别
id,我将试图最终得出以下结论:
---------------- ------------------
| Car | | Car |
---------------| -----------------|
| id: 1 | | id: 2 |
| make: Honda | | make: Toyota |
| model: Civic | | model: Corolla |
| year: 2016 | | year: 2013 |
---------------- ------------------
我已经在逗号上进行了一些成功的拆分,并获得了2个记录
的返回,但是我在\uu
上进行了拆分,并在记录
中加入了表
这是我目前的疑问:
WITH RECURSIVE record(recordhash, data) AS (
SELECT '', record || ',' FROM Category WHERE id = 1
UNION ALL
SELECT
substr(data, 0, instr(data, ',')),
substr(data, instr(data, ',') + 1)
FROM record
WHERE data != '')
SELECT recordhash
FROM record
WHERE recordhash != ''
这又回来了
--------------
| recordhash |
--------------
| Car_1 |
| Car_2 |
--------------
任何帮助都将不胜感激 如果递归CTE按预期工作,则可以将
记录哈希
的每个值拆分为
作为分隔符,并使用
之后的部分作为Car
行的id
,以返回:
select * from Car
where id in (
select substr(recordhash, 5)
from record
where recordhash like 'Car%'
)
你愿意改变你的桌子设计吗?我不想这么说,但这是完全错误的。这正是我所需要的,但是否可以通过编程方式设置表名呢?因此,它不是在查询中硬编码“Car”,而是来自recordhash?您有两个表:Car和Truck。如果您想要两个表的结果,可以通过一个并集和检查recordhash的第一部分来完成,但是表的名称仍然是硬编码的。这是您想要的吗?整个数据库大约有15个表。我刚刚更新了我的问题以替换卡车表。桌子都不一样。我正在尝试进行一个查询,只需将类别id传递到该查询中,即可获取记录列表。如果表名必须硬编码,那么我们就无能为力。查询不能根据参数返回不同的列数。它总是返回相同的结果。你需要的东西可以用编程语言来完成。我95%的查询都会返回相同的类型。我想我得为剩下的做些不同的事情。非常感谢你的帮助!