2017-07-31 98 views
1

新建SQLSERVER,我做这样的事情OR语句不工作

select * 
from table1 
where field1 IN ('textvalue1','textvalue2') OR field2 IN ('textvalue1','textvalue2') 

它不工作在所有...没有语法错误和AND语句工作正常。 我试着把它放在括号中。

+0

使用http://rextester.com/l/sql_server_online_compiler和编写代码,并将其链接和安装一些样本数据... – JGFMK

+1

什么是'list'?这是一个变量或子查询或...逗号分隔值? – scsimon

+1

你将不得不分享一些样本数据和你想要的结果。我们可以通过查看您的SQL语句告诉您,它会运行,它会运行,但您已经知道这一点。 – JNevill

回答

3

根据所有评论,您不能在数据中拥有您认为您所做的值。这是一个可重复使用的例子。

declare @table table (field1 varchar(64), field2 varchar(64)) 
insert into @table 
values 
('a','b'), 
('c','d'), 
('e','f'), --only row that won't return with logic below 
('g','h'), 
('i','j') 

select * 
from @table 
where field1 in ('a','c') or field2 in ('h','j') 

退货

+--------+--------+ 
| field1 | field2 | 
+--------+--------+ 
| a  | b  | 
| c  | d  | 
| g  | h  | 
| i  | j  | 
+--------+--------+ 

注意的SQL Server忽略尾随的平等经营的空间,但前导空格会失败。因此,如果你有领先的空间,你可以可能需要使用LTRIM()

declare @table table (field1 varchar(64), field2 varchar(64)) 
insert into @table 
values 
('a ','b'), 
('c ','d'), 
('e ','f'), 
('g',' h'), 
('i',' j') 

select * 
from @table 
where ltrim(field1) in ('a','c') or ltrim(field2) in ('h','j') 
+0

回顾我的数据后,我意识到它正在工作,它只是一个更大的组合之间的列,然后我预期...你的可视化帮助我意识到我是一个白痴。谢谢! – Heather

+0

不用担心@海瑟。这是大部分时间的小事情。 – scsimon

-1

要么要传递的名称作为变量然后使用“YYY”,或者如果使用的是内部查询然后传递子查询IN子句内如下所述取。

SELECT * 
FROM PERSON 
WHERE NAME IN ('jill') OR NAME IN (SELECT NAME FROM PERSON WHERE NAME ='jake');