sqlite 将特定字段Map到字符串

pw9qyyiw  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(206)

我在SQLite中有一个名为Clients的表:
ID|名称|爱好|子爱好
-|-|
1|安妮|运动、时尚|鞋子、游泳
2|Max|进食,自动|甜点,汽车
我使用公用表表达式(with split() as)拆分Hobbies列:
ID|名称|爱好|子爱好
-|-|
1|安妮|运动|鞋子、游泳
1|安妮|时尚|鞋子、游泳
2|最大|吃|甜点、汽车
2|MAX|自动|甜品、汽车
现在我还想拆分Subhubbies列,这可以使用CTE来完成。我想要的形式是(游泳是运动、鞋子-时尚、甜点-吃和汽车-自动的子集):
ID|名称|爱好|子爱好
-|-|
1|安妮|体育|游泳
1|安妮|时尚|鞋子
2|Max|进食|甜点
2|最大|自动|汽车
这张table上有很多客户、爱好和子爱好,所以我不想一一介绍。有没有什么办法可以拆分它们,并将它们放在合适的位置进行查询?

pvcm50d1

pvcm50d11#

您需要定义业余爱好表:

CREATE TABLE Hobbies (
  `Hobby` TEXT,
  `SubHobby` TEXT
);

INSERT INTO Hobbies
  (`Hobby`, `SubHobby`)
VALUES
  ('sports', 'swimming'),
  ('fashion', 'shoes'),
  ('eating', 'desserts'),
  ('automative', 'cars');

无论如何,您都应该拥有这个表,因为否则您的客户端表将不会标准化。然后对CLIENTS/HOBBIES表运行以下查询:

SELECT c.ID, c.Name, h.Hobby, h.SubHobby
FROM Clients AS c, Hobbies AS h
WHERE instr(' ' || c.SubHobbies || ',', ' ' || h.SubHobby || ',')

根据您的数据,简单的WHERE instr(c.SubHobbies, h.SubHobby)也可能运行得很好。

相关问题