2

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

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

编辑:表名和列名是虚构的,只是为了更好地解释这个问题

4

2 回答 2

3

使用正则表达式:

SELECT ChildId,MainValues FROM CHILD INNER JOIN MASTER WHERE ','||[Values]||',' like '%,'||MainValues||',%'

另外,请不要使用关键字,如values列名...

于 2012-11-04T02:57:09.583 回答
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);
于 2012-11-04T04:23:12.367 回答