2014-06-16 3 views
1

Я создал таблицу из файла CSV, созданного внешним программным обеспечением. Среди других полей эта таблица содержит одно поле под названием «CustomID». Каждая строка в этой таблице должна быть привязана к клиенту с использованием содержимого этого поля. Каждый клиент может иметь один или несколько наборов customID по своему усмотрению, если каждая последовательность начинается с того же префикса. Так, например: клиента 1 может использовать «cust1_n» и «cstm01_n» (где п число) Клиент 2 может использовать «customer2_n»Выбор строк с использованием нескольких условий LIKE из поля таблицы

ImportedRows 
    PKID CustomID  Description 
    ---- --------------- -------------------------- 
    1 cust1_001  Something 
    2 cust1_002  ... 
    3 cstm01_000001 ... 
    4 customer2_00001 ... 
    5 cstm01_000232 ... 
    .. 

Теперь я создал 2 таблицы поддержки следующим образом:

Customers 
    PKID Name 
    ---- -------------------- 
    1 Customer 1 
    2 Customer 2 

и

CustomIDs 
    PKID FKCustomerID SearchPattern 
    ---- ------------ ------------- 
    1 1   cust1_* 
    2 1   cstm01_* 
    3 2   customer2_* 

Что мне нужно достичь, это извлечение всех строк для данного клиента, используя все ЛИК E, найденные в таблицах CustomID для этого клиента. Я до сих пор терпел неудачу. Любые подсказки, пожалуйста? Спасибо заранее. Серебряный.

+2

Вы всегда должны назвать свои DBMS, задавая вопросы SQL здесь, так как различные СУБД (и даже версии) различаются, какие функции доступны. –

+0

@ThorstenKettner Не говоря уже о том, что даже базовые команды SQL или типы данных иногда имеют разные значения или ограничения для определенных случаев краев. Также рассмотрите возможность предоставления [SQL Fiddle] (http://sqlfiddle.com/), Silver. – jpmc26

ответ

1

Чтобы использовать LIKE, вы должны заменить * на% в шаблоне. Различные dbms используют разные функции для манипулирования строками. Давайте предположим, что существует REPLACE функция доступна:

SELECT ir.* 
FROM ImportedRows ir 
JOIN CustomIDs c ON ir.CustomID LIKE REPLACE(c.SearchPattern, '*', '%') 
WHERE c.FKCustomerID = 1; 
+0

Как я глуп, я ... я не понимал, что могу использовать LIKE как условие JOIN ... Спасибо, друг! Это очевидно работает ... – Silver

Смежные вопросы