为什么这 3 个查询没有返回正确的记录
Why do these 3 queries not returning the correct records
我有这个 SQL 查询 returns 4 列和 45 行。
Select ComplaintID, ProblemStreet, ProblemCrossStreet,ProblemSubdivision
From Complaints
where ProblemCrossStreet Like '%PARK MANOR%' OR ProblemStreet Like '%PARK
MANOR%' Or ProblemSubdivision Like '%PARK MANOR%'
此查询 returns 4 列和 31 行:
DECLARE @a as varchar(Max) = 'PARK MANOR'
Select ComplaintID, ProblemStreet, ProblemCrossStreet,ProblemSubdivision
From Complaints
where ProblemCrossStreet Like @a OR ProblemStreet Like @a Or
ProblemSubdivision Like @a
这个查询是我需要的 return 它应该是 2 列和 45 行
DECLARE @a as varchar(Max) = 'PARK MANOR'
Select ComplaintID,ProblemCrossStreet From Complaints Where
ProblemCrossStreet like @a
Union ALL
Select ComplaintID,ProblemStreet from Complaints Where ProblemStreet Like @a
Union ALL
Select ComplaintID, ProblemSubdivision From Complaints where
ProblemSubdivision like @a
怎么上次查询只有 returns 34 行?为什么这 3 个查询看起来相同而不是 return 相同的值,最重要的是如何让我的第三个查询 return 那 2 列和 45 行?
用 % 声明你的变量。
DECLARE @a as varchar(Max) = '%PARK MANOR%'
或更新您的查询以添加 %
where ProblemCrossStreet Like CONCAT('%', @a, '%') OR ProblemStreet Like CONCAT('%', @a, '%') Or
ProblemSubdivision Like CONCAT('%', @a, '%')
简单:
ProblemCrossStreet Like 'PARK MANOR'
和
ProblemCrossStreet Like '%PARK MANOR%'
做不同的事情。第一个寻找精确的(ish)匹配。第二个查找名称中任意位置的模式。
第三个查询,使用的是union all
。因此,如果一行满足两个条件,则形成 returns 两行。
不清楚您真正想要的是哪个。如果您想要通配符匹配,请在 like
模式中包含通配符。如果您希望每个匹配项单独一行,请使用 union all
.
编辑:
您似乎想要:
declare @a as varchar(Max) = 'PARK MANOR';
Select ComplaintID, ProblemCrossStreet
From Complaints
Where ProblemCrossStreet like concat('%', @a, '%')
Union ALL
Select ComplaintID, ProblemStreet
from Complaints
Where ProblemStreet Like concat('%', @a, '%')
Union ALL
Select ComplaintID, ProblemSubdivision
From Complaints
where ProblemSubdivision like concat('%', @a, '%');
我有这个 SQL 查询 returns 4 列和 45 行。
Select ComplaintID, ProblemStreet, ProblemCrossStreet,ProblemSubdivision
From Complaints
where ProblemCrossStreet Like '%PARK MANOR%' OR ProblemStreet Like '%PARK
MANOR%' Or ProblemSubdivision Like '%PARK MANOR%'
此查询 returns 4 列和 31 行:
DECLARE @a as varchar(Max) = 'PARK MANOR'
Select ComplaintID, ProblemStreet, ProblemCrossStreet,ProblemSubdivision
From Complaints
where ProblemCrossStreet Like @a OR ProblemStreet Like @a Or
ProblemSubdivision Like @a
这个查询是我需要的 return 它应该是 2 列和 45 行
DECLARE @a as varchar(Max) = 'PARK MANOR'
Select ComplaintID,ProblemCrossStreet From Complaints Where
ProblemCrossStreet like @a
Union ALL
Select ComplaintID,ProblemStreet from Complaints Where ProblemStreet Like @a
Union ALL
Select ComplaintID, ProblemSubdivision From Complaints where
ProblemSubdivision like @a
怎么上次查询只有 returns 34 行?为什么这 3 个查询看起来相同而不是 return 相同的值,最重要的是如何让我的第三个查询 return 那 2 列和 45 行?
用 % 声明你的变量。
DECLARE @a as varchar(Max) = '%PARK MANOR%'
或更新您的查询以添加 %
where ProblemCrossStreet Like CONCAT('%', @a, '%') OR ProblemStreet Like CONCAT('%', @a, '%') Or
ProblemSubdivision Like CONCAT('%', @a, '%')
简单:
ProblemCrossStreet Like 'PARK MANOR'
和
ProblemCrossStreet Like '%PARK MANOR%'
做不同的事情。第一个寻找精确的(ish)匹配。第二个查找名称中任意位置的模式。
第三个查询,使用的是union all
。因此,如果一行满足两个条件,则形成 returns 两行。
不清楚您真正想要的是哪个。如果您想要通配符匹配,请在 like
模式中包含通配符。如果您希望每个匹配项单独一行,请使用 union all
.
编辑:
您似乎想要:
declare @a as varchar(Max) = 'PARK MANOR';
Select ComplaintID, ProblemCrossStreet
From Complaints
Where ProblemCrossStreet like concat('%', @a, '%')
Union ALL
Select ComplaintID, ProblemStreet
from Complaints
Where ProblemStreet Like concat('%', @a, '%')
Union ALL
Select ComplaintID, ProblemSubdivision
From Complaints
where ProblemSubdivision like concat('%', @a, '%');