我正在尝试执行此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有关,但我不确定。
答案 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。