我只需要显示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')
答案 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'