Возможно ли в SQL сопоставить LIKE из списка записей в подзапросе? - PullRequest
2 голосов
/ 26 февраля 2009

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

CodeVariations

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

RegisteredCodes

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 ]

4 голосов
/ 26 февраля 2009

Делает ли это то, что вам нужно?

select distinct RC.* from RegisteredCodes RC, CodeVariations CV
where RC.CODE LIKE CV.CODE;
0 голосов
/ 24 июля 2009
select * from CAT_ITEM where DESCRICAO LIKE '%TUBO%%PVC%%DNR%'

Список всех лайков находится в строке.

0 голосов
/ 26 февраля 2009

В 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) ;
0 голосов
/ 26 февраля 2009

Это то, что вы ищете:

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

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

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

...