2015-05-12 2 views
1

Я хочу сделать оператор SELECT, используя значения, которые у меня есть в переменной таблицы.Инструкция LIKE с переменной таблицы

declare @emailids TABLE (usrmst_id INT) 
declare @actionids TABLE (tskmst_id INT) 

insert into @emailids (usrmst_id) 
    select usrmst_id 
    from usrmst 
    where usrmst_domain = 'EMAIL' 

insert into @actionids (tskmst_id) 
    select tm.tskmst_id 
    from tskmst tm 
    inner join tskmail tml 
     on tml.tskmail_id = tm.tskmst_id 
    where 
     tskmail_to_int like '%' + (select cast(usrmst_id as CHAR(5)) from @emailids) + '%' 

select * from @actionids 

Это, очевидно, неудачу, потому что select cast(usrmst_id as CHAR(5)) from @emailids имеет несколько результатов. Я хочу сделать это для каждого значения в таблице @emailids, чтобы сгенерировать возврат в таблицу @actionids.

+0

Вы пытаетесь? выберите DISTINCT usrmst_id из usrmst, где usrmst_domain = 'EMAIL' – Beto

+1

@Beto - для каждого значения есть только один usrmst_id с доменом EMAIL, поэтому мне не нужно делать DISTINCT. – whoisearth

ответ

1

Вы можете попробовать использовать вместо INNER JOIN:

insert into @actionids (tskmst_id) 
    select tm.tskmst_id 
    from tskmst tm 
    inner join tskmail tml 
     on tml.tskmail_id = tm.tskmst_id 
    inner join @emailids e 
     on tskmail_to_int like '%' + cast(e.usrmst_id as varchar(5)) + '%' 

Вы должны CAST к VARCHAR вместо CHAR. Я считаю, что кастинг до CHAR прокладывает строки с пробелами, пока не достигнет определенной длины. Итак, когда вы CAST 60 до CHAR(5), это будет 60[space][space][space].

+0

Это не дает мне неудачу, но она не возвращает никаких значений, и это должно быть. Я пытаюсь понять, почему это так. Если я изменю последнюю строку на это: 'на tskmail_to_int, например '%' + '60' + '%'', который является одним из значений в @emailids, он возвращает значение для каждого значения в таблице (то же значение очевидно) но он не делает этого в коде, который вы положили. – whoisearth

+0

Попробуйте выполнить кастинг на 'VARCHAR' вместо' CHAR'. –

+0

, который работает! любая идея, почему она предпочитает «VARCHAR»? – whoisearth

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