2017-07-31 5 views
1

新規動作していないと私はそれがすべてで...ないの構文エラー働いていないORステートメントは、SQLServerのために

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

RETURNS NOTE、SQL Serverの

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

は、等価演算子のための末尾のスペースを無視しますが、先頭のスペースは失敗します。したがって、あなたが先導スペースを持っている場合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

@Heatherに全く心配はありません。ほとんどの場合、それは小さなものです。 – scsimon

-1

あなたはその後、「YYY」を使用するか、内側のクエリを使用してフェッチされている場合は下記のようにIN句内のサブクエリを渡す変数として名前を渡しているのどちらか。

SELECT * 
FROM PERSON 
WHERE NAME IN ('jill') OR NAME IN (SELECT NAME FROM PERSON WHERE NAME ='jake'); 
関連する問題