SQL - Создание регулярного выражения для SELECT с результатами подзапроса SELECT? - PullRequest
0 голосов
/ 24 марта 2019

Я нахожусь в такой ситуации.

У меня есть таблица, которая выглядит примерно так:

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, которые находятся в TABLE, но использовать этот набор результатов как часть выражения регулярного выражения.

Поскольку я использую это в контексте Javascript с библиотекой sqlite для node.js, я могу теоретически вернуть все совпадения и вручную построить цепочку операторов WHERE с заполнителями на основе возврата предыдущего запроса, например:

SELECT *
FROM TableB
WHERE name REGEXP '^(?)[0-9]*' OR
      name REGEXP '^(?)[0-9]*' OR

С одним (?) Заполнителем для каждого значения в Таблице А. Я хотел бы знать, возможно ли сделать это в одном выражении, так как это кажется очень неуклюжим. В идеале я снимаю что-то вроде этого, но это не сработает так:

SELECT *
FROM TableB
WHERE name REGEXP '^(SELECT ...)[0-9]*'

1 Ответ

0 голосов
/ 24 марта 2019

Используйте 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]+')
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...