2011-06-10 37 views
3

比方說,我有以下的,這是可以使用像所有關鍵字

declare @A table (a int) 

insert into @A 
select 1 union all 
select 2 union all 
select 3 

select a FROM @A 
where a > ALL (select 1 union all select 2) 

這將工作。但我需要使用Like而不是比這裏更大,

declare @A table (a int) 

insert into @A 
select 1 union all 
select 2 union all 
select 3 

select a FROM @A 
where a LIKE ALL (select 1 union all select 2) 

請幫助我。

編輯: 這裏是我原來的舊錶的樣子,

declare @A table (a varchar(500)) 

insert into @A 
select 'a;b;c' union all 
select 'a;d;b' union all 
select 'c;a;e' 

我的應用程序在我的SP如發送值 'A; B' 或 'B; C; A' 等等,

現在我只需要選擇表格@A中具有a和b或b和c以及a的那些行。 我在我的SP中使用分割函數來將用戶輸入作爲表格。 這就是爲什麼我需要在這裏使用Like ALL。但任何其他建議也是受歡迎的。

+1

目前尚不清楚你的意圖是什麼。你能否在一句話中解釋要求是什麼?是什麼讓你傾向於「LIKE」? – 2011-06-10 18:17:18

+0

您需要改進問題 - 因爲您已經將問題抽象得太多,所以我們無法說出爲什麼要使用LIKE或實際必須如此。 – 2011-06-11 05:04:16

+0

@ omg-ponies,爲了更好的理解,我編輯了這個問題。 – 2011-06-11 06:55:02

回答

2

這是不可能使用all與like。如果我的理解正確,你可以使用這個代替

declare @T table (ID int primary key, Col varchar(25)) 

insert into @T 
select 1, 'a;b;c' union all 
select 2, 'a;b;c' union all 
select 3, 'a;d;b' union all 
select 4, 'bb;a;e' 

declare @Input table(val varchar(10)) 
insert into @Input values('a') 
insert into @Input values('b') 

select T.ID 
from @T as T 
    inner join @Input as I 
    on ';'+T.Col+';' like '%;'+I.val+';%' 
group by T.ID  
having count(t.ID) = (select count(*) from @Input) 

結果

ID 
1 
2 
3 
+0

優秀的把戲Mikael。 – 2011-06-11 09:42:11

0

你想要IN嗎?

SELECT a FROM @A WHERE a IN (1,2) 
+0

不,我只需要在ALL關鍵字中不用檢查=,>等,我想用like。我有一箇舊表,其中包含一個逗號分隔值的列和應用程序發送逗號分隔值到SP。我正在使用Split功能。這就是爲什麼我需要像所有 – 2011-06-10 18:20:45

0

試着創建一個新的表,它將有搜索值,然後使用LIKE語句將其加入。

create table searchvalues 

(

myvalues varchar(30) 

) 

INSERT INTO SearchValues  
SELECT '%1%' 
UNION SELECT '%2%' 


SELECT * FROM @A  
join searchvalues on a like myvalues 
+0

這不會工作。爲了更好的理解,我編輯了這個問題。 – 2011-06-11 06:54:08

相關問題