1

标题有点混乱,所以我将用一个例子来解释我想要做什么。

我有一个名为“修饰符”的字段。这是一个包含每个人的串联值的字段。例如,一行中的值可能是:

*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:我意识到我可以使用正则表达式并执行一堆 or 语句来搜索 MOD 列表中的逗号分隔值,但是有更好的方法吗?

4

1 回答 1

0

一种方法是使用 TRIM、字符串连接和 LIKE。

SELECT *
FROM tableA a
WHERE EXISTS(
   SELECT 1 FROM tableB b
   WHERE   
       ','|| trim( trim( BOTH '*' FROM a.Modifier )) ||','
       LIKE  '%,'|| b.mod || ',%'
);

Demo --> http://www.sqlfiddle.com/#!4/1caa8/10

对于大表来说,这个查询可能仍然很慢(它总是对表或索引执行全扫描),但是它应该比使用常规更快表达式或将逗号分隔的列表解析为单个值。

于 2013-10-25T07:09:35.163 回答