我发现自己处于这种情况。
我有一个看起来像这样的表:
TableA
ID Name
1 First
2 Second
3 Third
...
我还有第二张桌子,看起来像这样:
TableB
ID Name
...
95 Fifth
96 First
97 First121
98 Third9
99 1Second22
100 Fourth
...
我试图找出如何完全按照以下格式查找表B中的任何记录: ^ [表A中的子字符串] [0-9] *
因此,记录97和98应该位于结果集中。如果有96和99,我可以解决,但理想情况下我不愿意。
从本质上讲,我试图弄清楚如何使用WHERE IN / JOIN语法在表B中查找表中的记录,而将结果集用作正则表达式的一部分。
因为我在带有node.js sqlite库的Javascript上下文中使用了它,所以理论上我可以返回所有匹配项,并根据上一个查询的返回情况,手动构建带有占位符的WHERE语句链:
SELECT *
FROM TableB
WHERE name REGEXP '^(?)[0-9]*' OR
name REGEXP '^(?)[0-9]*' OR
对于表A中的每个值都有一个(?)占位符。我想知道是否有可能在一个语句中执行此操作,因为这感觉非常笨拙。理想情况下,我正在拍摄类似这样的图片,但是它不能按原样工作:
SELECT *
FROM TableB
WHERE name REGEXP '^(SELECT ...)[0-9]*'
答案 0 :(得分:0)
使用exists
或join
:
select b.*
from b
where exists (select 1
from tablea a
where b.name regexp concat(a.name, '[0-9]*')
);
您如何指定正则表达式。如果您不想使用'First'
,请使用:
where exists (select 1
from tablea a
where b.name regexp concat('^', a.name, '[0-9]+')
);