在行中搜索 SQLite 字符串,然后将字符串插入到新行中,其值与最后一列的同一行相同

SQLite string search in rows then insert string into new rows with values of the same row last column

我想向我的数据库提供一个查询,该查询将搜索 Column2(site_id) 中是否存在一个字符串,然后将该字符串放入一个新的 table 中,其前一列的值为那一行。

table只有2列,site_id列可能有很多我想要的5字串。

在下面的示例中,我想获取所有特定站点 ID。例如:E7089 或 E7459(我需要所有这些,第一个单词是随机的,如 E 或 T 等,四位数字是可变的)

当前第一行是这样的:有一个ticket_id和许多site_ids(我只需要站点ID like:g1231或g1236而不是括号中的地址)

ticket_id             |  site_id |
sss-bb-12312312-12312 | g1231(afsdgf-sdgsdgdg), g1236(sdfsdgsdg), g3212(asdfas-dfsd), b2311(asdasd), b3213(asdfsdf)

然后像这样:

ticket_id             |  site_id |
sss-bb-12312312-12312  g1231
sss-bb-12312312-12312  g3211
sss-bb-12312312-12312  g1236
sss-bb-12312312-12312  b2311
sss-bb-12312312-12312  b3213

我已经可以搜索整个第二列并使用正则表达式找到 5 个单词的网站 ID(如果你想尝试:[A-Z]\d{1,4}),但我无法从行并将它们中的每一个插入一个新行,我当前的代码是这样的:

drop TABLE if EXISTS test2;
CREATE TABLE if NOT EXISTS test2 (
Ticket_id varchar,
site_id varchar
);
INSERT INTO test2 
SELECT ticket_id, site_id 
FROM TEST WHERE site_id regexp '[A-Z]\d{1,4}';

但上面的代码会找到包含 site_id 的行并插入所有与搜索匹配的行,我不希望这样。 有人可以帮助将第一个转换为第二个吗? 基本上当前的数据库是这样的:

culumn1 | column2
ticket1 | many site ids
ticket2 | many site ids

但我想要这样:

culumn1 | column2
ticket1 | id
ticket1 | id
ticket1 | id
ticket1 | id
ticket2 | id
ticket2 | id
ticket2 | id

-门票不需要任何更改,只需将其复制到新的行中并指定 site_id

-每张票有很多 site_id(我已经可以用正则表达式找到它们)需要像上面提到的那样分隔到新行。

-它需要在 sqlite 数据库浏览器和数据库浏览器中完成(它是这样分配的,必须那样做,所以不幸的是没有 python)

您需要一个递归 CTE 来拆分 table test1site_id 列和 SUBSTR() 函数以将前 5 个字符插入 table test2:

WITH cte AS (
    SELECT ticket_id, '' site_id, site_id || ',' s 
    FROM test1
    UNION ALL 
    SELECT ticket_id,
           SUBSTR(s, 0, INSTR(s, ',')),
           SUBSTR(s, INSTR(s, ',') + 1)
    FROM cte 
    WHERE s <> ''
) 
INSERT INTO test2 (ticket_id, site_id) 
SELECT ticket_id, SUBSTR(TRIM(site_id), 1, 5) 
FROM cte
WHERE site_id <> '';

参见demo