Почему эти 3 запроса не возвращают правильные записи - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть этот запрос SQL, который возвращает 4 столбца и 45 строк.

Select ComplaintID, ProblemStreet, ProblemCrossStreet,ProblemSubdivision
 From Complaints 
 where ProblemCrossStreet Like '%PARK MANOR%' OR ProblemStreet Like '%PARK 
MANOR%' Or ProblemSubdivision Like '%PARK MANOR%'

Этот запрос возвращает 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

И этот запрос - это то, что мне нужно для возврата. Это должно быть 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

Как только последний запрос возвращает только 34 строки? Почему эти 3 запроса, которые кажутся одинаковыми, не возвращают одинаковые значения, и больше всего мне нужно, чтобы мой третий запрос возвратил эти 2 столбца и 45 строк?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Simple:

ProblemCrossStreet Like 'PARK MANOR'

и

ProblemCrossStreet Like '%PARK MANOR%'

делай разные вещи. Первый ищет точное (ish) совпадение. Второй ищет шаблон в любом месте имени.

Что касается третьего запроса, он использует union all. Таким образом, если одна строка соответствует двум условиям, то форма возвращает две строки.

Непонятно, чего вы действительно хотите. Если требуется сопоставление с подстановочными знаками, включите подстановочные знаки в шаблон like. Если вы хотите отдельную строку для каждого совпадения, используйте union all.

EDIT:

Похоже, вы хотите:

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, '%');
0 голосов
/ 17 сентября 2018

Объявите вашу переменную как, с%.

DECLARE @a as varchar(Max) = '%PARK MANOR%'

Или обновите ваши запросы, добавив%

where ProblemCrossStreet Like CONCAT('%', @a, '%') OR ProblemStreet Like CONCAT('%', @a, '%') Or 
ProblemSubdivision Like CONCAT('%', @a, '%')
...