标题有点令人困惑,所以我将用一个例子来解释我正在尝试做什么。
我有一个名为“修饰符”的字段。这是一个具有每个人的连接值的字段。例如,一行中的值可以是:
*26,50,4 *
和下一行的值
*4 *
表格(表A)看起来像这样:
Key Modifier
1 *26,50,4 *
2 *4 *
3 *1,2,3,4 *
星号总是处于同一位置(此处为1和26),中间数字不确定,以逗号分隔。
我想要做的是将“修饰符”字段“加入”另一个表(表B),其中包含该修饰符的可能值列表。例如,该表可能如下所示:
ID MOD
1 26
2 3
3 50
4 78
如果A.modifier中的值出现在B.mod中,我想在表A中保留该行。否则,请将其保留。 (我松散地使用术语“加入”,因为我不确定这是我需要的。)
这可能吗?我该怎么做?
提前致谢!
编辑1:我意识到我可以使用正则表达式并执行一堆或语句来搜索MOD列表中逗号分隔的值,但是有更好的方法吗?
答案 0 :(得分:0)
一种方法是使用TRIM,字符串连接和LIKE。
SELECT *
FROM tableA a
WHERE EXISTS(
SELECT 1 FROM tableB b
WHERE
','|| trim( trim( BOTH '*' FROM a.Modifier )) ||','
LIKE '%,'|| b.mod || ',%'
);
演示 - > http://www.sqlfiddle.com/#!4/1caa8/10
这个查询对于大型表来说仍然很慢(它总是执行对表或索引的完全扫描),但它应该比使用正则表达式或将逗号分隔列表解析为单个值更快。