匹配列中的列与sqlite中的连接值

时间:2012-11-04 02:41:33

标签: sql sqlite

我有一个表格,其列具有像这样的连接值

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中拆分和匹配?

编辑:表格和列名称是虚构的,仅用于更好地解释这个问题

2 个答案:

答案 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);