或者声明不起作用

时间:2017-07-31 19:42:15

标签: sql sql-server

Sqlserver的新手,我正在做类似

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

它根本不工作......没有语法错误,AND语句正常工作。 我也尝试将它括在括号中。

2 个答案:

答案 0 :(得分: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      |
+--------+--------+

OF NOTE 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')

答案 1 :(得分:-1)

您要么将名称作为变量传递,然后使用'YYY',要么使用内部查询进行提取,然后在IN子句中传递子查询,如下所述。

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