SQL WHERE AND&或者条款

时间:2010-12-27 17:03:19

标签: sql

我正在尝试执行此SQL语句,虽然它确实执行,但它不会返回预期的结果。下面是WHERE子句:

WHERE SubnetID.ID = '2' 
  AND Subnets.DomainName LIKE '%tns%' 
  OR Subnets.ServerID LIKE '%tns%' 
  OR CONCAT(SubnetID.IP_Prefix,'.',Subnets.LastOctet) LIKE '%tns%' 
  OR Servers.Name LIKE '%tns%' 
  OR Subnets.Comment LIKE '%tns%'

什么是WHERE SubnetID.ID ='2'行似乎被完全忽略,因为我返回SubnetID.ID设置为'2'以外的值的行。它正在处理LIKE子句,它只是不过滤掉SubnetID.ID值。

我认为这与使用AND / OR / LIKE有关,但我不确定。

3 个答案:

答案 0 :(得分:3)

这应该有效

WHERE SubnetID.ID = '2' AND 
(
  Subnets.DomainName LIKE '%tns%' OR
  Subnets.ServerID LIKE '%tns%' OR
  CONCAT(SubnetID.IP_Prefix,'.',Subnets.LastOctet) LIKE '%tns%' OR
  Servers.Name LIKE '%tns%' OR
  Subnets.Comment LIKE '%tns%'
)

您的查询是以这种方式执行的

WHERE (
  SubnetID.ID = '2' AND 
  Subnets.DomainName LIKE '%tns%'
) OR
(Subnets.ServerID LIKE '%tns%') OR
(CONCAT(SubnetID.IP_Prefix,'.',Subnets.LastOctet) LIKE '%tns%') OR
(Servers.Name LIKE '%tns%') OR
(Subnets.Comment LIKE '%tns%')

答案 1 :(得分:2)

试试这个:

WHERE SubnetID.ID = '2' AND 
( Subnets.DomainName LIKE '%tns%' 
  OR Subnets.ServerID LIKE '%tns%' 
  OR CONCAT(SubnetID.IP_Prefix,'.',Subnets.LastOctet) LIKE '%tns%' 
  OR Servers.Name LIKE '%tns%' 
  OR Subnets.Comment LIKE '%tns%
)

答案 2 :(得分:1)

运算符优先级很可能是导致问题的原因。如果您正在使用其中一个DBMS产品,那么这是Microsoft的link