2017-02-17 7 views
0

есть список (таблица) из PROJECTNUMBERS с различной длиной, например:SQL выберите Exist частично

123 
1254 
25-135 

то у меня есть список (Long) (таблица) из DRAWINGNUMBERS с действительными и недействительными значениями.

Действительно те, которые начинаются с Projectnumber (смотри выше),

valid: 
123-78787 
123-78799 
25-135.115-15 
25-135-511 


invalid 
1841 
Anything else 

Я пытаюсь использовать

select * from DRAWINGNUMBERS where exit ??? PROJECTNUMBER 

Это не удается, так как EXIST или IN ... всегда EXECT к найдите значение.
Однако я не могу использовать LEFT (..), поскольку PROJECTNUMBERS имеют разную длину.

ASK:
Любая идея, как выбрать действительные drawingnumbers?

+0

Откуда вы взяли 'EXIT'? – Siyual

+1

Не могли бы вы пометить СУБД, которые вы используете, как SQLServer/mysql/oracle ... – TheGameiswar

+0

MS SQL Server 2014 – Volker

ответ

1

Типичный метод использует exist или join. Вот один способ:

select d.*, 
     (case when exists (select 1 
          from projects p 
          where d.drawingnumber like concat(p.projectnumber, '%') 
         ) 
      then 1 else 0 
     end) as validFlag 
from drawings d; 

Я предпочитаю exists потому, что два проекта может соответствовать один и тот же рисунок. , , «12» и «123». join будет создавать несколько строк.

Следует отметить, что не все базы данных поддерживают функцию concat(). , , вы можете использовать + или || или & в зависимости от вашей базы данных.

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

  • Нет связанных вопросов^_^