我有一个表格,其列具有像这样的连接值
Table CHILD:
ChildId Values
2 x123,j455
3 f456,z789
4 m333,y567
5 x123,h888
我有一个主表MASTER
Table MASTER:
MainValues
x123
f456
y567
我需要获得一个“选择以下数据
的查询”ChildId MainValues
2 x123
3 f456
4 y567
5 x123
基本匹配子值中MASTER的值,并仅返回主值。我怎样才能做到这一点 ?我已经尝试过与第二个表匹配的IN和LIKE子句,但由于值为csv,因此没有多大帮助。有没有办法在sqlite中拆分和匹配?
编辑:表格和列名称是虚构的,仅用于更好地解释这个问题
答案 0 :(得分:3)
使用正则表达式:
SELECT ChildId,MainValues FROM CHILD INNER JOIN MASTER WHERE ','||[Values]||',' like '%,'||MainValues||',%'
此外,请不要使用values
等关键字作为列名...
答案 1 :(得分:0)
不幸的是,SQLite没有从字符串中查找字符索引的功能。所以你必须依赖别的东西。 Idan的方法也很好,但可能会慢一点。你可以试试这个:
SELECT c.childID, m.mainvalues
FROM CHILD c
JOIN MASTER m
WHERE m.mainvalues = substr(c.ivalues, -length(c.ivalues), 4)
OR m.mainvalues = substr(c.ivalues, 6);
我假设,
之前和之后的字符数使用了4和6。如果没有修复,你可以试试:
SELECT c.childID, m.mainvalues
FROM CHILD c
JOIN MASTER m
WHERE m.mainvalues = substr(c.ivalues, -length(c.ivalues), length(m.mainvalues))
OR m.mainvalues = substr(c.ivalues, length(m.mainvalues) + 2);