在SQL查询中使用和/或两者

时间:2015-02-09 16:21:29

标签: sql-server

我只需要显示ship_status为final的记录,而field1不为null或field2不为null。 ship_status = final必须是field1 / field2,或者必须为true。但是,当我尝试查询时,它会返回所有结果吗?

Create Table #123
(
  ID int,
  ship_status varchar(100),
  field2 varchar(100),
  field3 varchar(100)
)

Insert Into #123 Values
('1','Final', 'No', 'Null'),
('2', 'Test', 'Null', 'Null'),
('3','Null', 'Null', 'Null'),
('4','Null', 'Null', 'Null'),
('5','Final', 'Null', 'No'),
('6','Final', 'Null', 'No'),
('7','Final', 'Null', 'No')

Select * from #123
WHERE field2 IS NOT NULL OR field3 IS NOT NULL
AND ship_status IN ('Final')

3 个答案:

答案 0 :(得分:1)

您需要将OR逻辑组合在一起(带括号),如下所示:

Select * from #123
WHERE (field2 IS NOT NULL OR field3 IS NOT NULL)
      AND ship_status IN ('Final')

如果您只是搜索单一状态,我还会将AND部分更改为等式检查:

ship_status = 'Final'

答案 1 :(得分:1)

正是@Tanner所说的。 SQL中的逻辑操作具有执行优先级,因此 AND 的优先级高于 OR 这里有一些更多细节:sql-logic-operator-precedence-and-and-or

答案 2 :(得分:0)

首先检查你的数据,它应该是:

Insert Into #123 Values
('1','Final', 'No', Null),
('2', 'Test', Null, Null),
('3','Null', Null, Null),
('4','Null', Null, Null),
('5','Final', Null, 'No'),
('6','Final', Null, 'No'),
('7','Final', Null, 'No')

如果是这样,您的查询可能是:

Select ID, ship_status, field2, field3 from #123
WHERE (field2 IS NOT NULL OR field3 IS NOT NULL)
AND ship_status = 'Final'

否则你有varchar字符串值" Null"。在那种情况下:

Select ID, ship_status, field2, field3 from #123
WHERE (field2 <> 'NULL' OR field3 <> 'NULL')
AND ship_status = 'Final'