在SQLite列中拆分数据

ecbunoof  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(148)

我有一个SQLite数据库,看起来类似于这样:

----------   ------------   ------------
| Car    |   | Computer |   | Category |  
----------   ------------   ------------
| id     |   | id       |   | id       |  
| make   |   | make     |   | record   |  
| model  |   | price    |   ------------
| year   |   | cpu      |
----------   | weight   |
             ------------

我的Category表中的record列包含一个逗号分隔的表名列表和属于该Category的项的id,因此条目如下所示:Car_1,Car_2

=====================
|     Category      |  
---------------------
| id  |  record     |
---------------------
|  1  | Car_1,Car_2 |
---------------------

我尝试在逗号上分割记录中的项目以获得每个值:

Car_1
Car_2

然后我需要更进一步,在_上进行拆分,并返回Car记录。
所以如果我知道Category id,我最后会这样结束:

----------------   ------------------
| Car          |   | Car            |
---------------|   -----------------|
| id: 1        |   | id: 2          |
| make: Honda  |   | make: Toyota   |
| model: Civic |   | model: Corolla |
| year: 2016   |   | year: 2013     |
----------------   ------------------

我已经成功地在逗号上进行了分割,并得到了2个record,但我仍然坚持在_上进行分割,并在record中连接到表。
这是我到目前为止的查询:

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      |
--------------

任何帮助将不胜感激!

qcuzuvrc

qcuzuvrc1#

如果你的递归CTE按预期工作,那么你可以将recordhash的每个值与_分开作为一个整数,并使用_之后的部分作为Car中的id来返回:

select * from Car
where id in (
  select substr(recordhash, 5)
  from record
  where recordhash like 'Car%'
)

相关问题