2015-05-12 75 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

你试试?从usrmst中选择DISTINCT usrmst_id,其中usrmst_domain ='EMAIL' – Beto

+1

@Beto - 对于每个具有域'EMAIL'的值,只有一个usrmst_id,因此我不需要执行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)) + '%' 

你应该CASTVARCHAR而不是CHAR。我相信铸造到CHAR用空格填充字符串,直到它达到定义的长度。所以当你CAST 60到CHAR(5),它变成60[space][space][space]

+0

这不是给我一个失败,但它没有返回任何值,它应该是。我试图理解这是为什么。如果我把最后一行改为这个 - 在tskmail_to_int上,像'%'+'60'+'%'这是@emailids中的一个值,它会为表中的每个值返回一个值(显然是相同的值)但它并没有在你所放置的代码中完成。 – whoisearth

+0

尝试转换为'VARCHAR'而不是'CHAR'。 –

+0

工作!任何想法为什么它更喜欢'VARCHAR'? – whoisearth