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からの値を一致させ、マスター値のみを返します。これどうやってするの ?2番目のテーブルと一致する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には文字列から文字のインデックスを見つける機能がありません。したがって、他の何かに依存する必要があります。イダンの方法も良いですが、遅くなる可能性があります。あなたはこれを試すことができます:

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 に答える