Sql server 在SQL查询中同时使用和/或
我只需要显示ship_状态为final且field1不为null或field2不为null的记录。ship_status=final是必须的字段1/field2为或,但必须为真。但是当我尝试查询时,它会返回所有结果吗Sql server 在SQL查询中同时使用和/或,sql-server,Sql Server,我只需要显示ship_状态为final且field1不为null或field2不为null的记录。ship_status=final是必须的字段1/field2为或,但必须为真。但是当我尝试查询时,它会返回所有结果吗 Create Table #123 ( ID int, ship_status varchar(100), field2 varchar(100), field3 varchar(100) ) Insert Into #123 Values ('1','Final
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')
您需要使用括号将OR逻辑分组,如下所示:
Select * from #123
WHERE (field2 IS NOT NULL OR field3 IS NOT NULL)
AND ship_status IN ('Final')
另外,如果您只是搜索单个状态,我会将AND部分更改为相等检查:
ship_status = 'Final'
正是@Tanner所说的。SQL中的逻辑操作具有执行优先级,因此其优先级高于或
此处有更多详细信息:首先检查您的数据,它应该是:
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'
否则,将使用字符串值为Null的varchar。在这种情况下:
Select ID, ship_status, field2, field3 from #123
WHERE (field2 <> 'NULL' OR field3 <> 'NULL')
AND ship_status = 'Final'