Возможно ли в SQL сопоставить LIKE из списка записей в подзапросе?

Используя эти таблицы в качестве образца:

Варианты кода :

CODE
-----------
ABC_012
DEF_024
JKLX048

Зарегистрированные коды :

CODE       AMOUNT
--------   ------
ABCM012         5
ABCK012        25
JKLM048        16

Можно ли написать запрос для получения всех строк в RegisteredCodes, когда CODE соответствует шаблону в любой строке таблицы CodeVariations ? То есть любая строка, которая соответствует шаблону LIKE либо 'ABC_012', 'DEF_024' либо 'JKLX048'

Результат должен быть:

CODE       AMOUNT
--------   ------
ABCM012         5
ABCK012        25

Я использую PostgreSQL, но было бы интересно узнать, можно ли это сделать с помощью простого запроса для PostgreSQL или любой другой БД.

Ответов (4)

Решение

Это то, что вам нужно?

select distinct RC.* from RegisteredCodes RC, CodeVariations CV
where RC.CODE LIKE CV.CODE;

В Oracle и PostgreSQL вы можете использовать одиночные символы подстановки «_» для одиночных символов.

select RC.* from RegisteredCodes RC, CodeVariations CV
where RC.CODE LIKE 'ABC_012';

использовать подстроку

select RC.* from RegisteredCodes RC, CodeVariations CV
where RC.CODE LIKE substring(CV.Code,1,3)||'_'||substring(CV.Code,5) ;
select * from CAT_ITEM where DESCRICAO LIKE '%TUBO%%PVC%%DNR%'

Все похожие списки находятся в строке.

Это вы ищете:

SELCET * FROM RegisteredCodes RC WHERE RC.Code IN (SELECT CODE FROM CodeVariations WHERE CODE LIKE ('ABC%') AND CODE LIKE ('%012')

При этом будут извлечены все записи, которые начинаются с «ABC» и заканчиваются на «012» и аналогичные для «DEF» и «JKL».
ИЛИ

Вы ищете что - то вроде этого?