Поисковый запрос SQL для нескольких предложений Where, например, Имя и Фамилия - PullRequest
1 голос
/ 30 января 2011

У меня есть SQL-запрос, который работает, если я ищу по имени или фамилии:

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + 'Smith' + '%'
ORDER BY FullName

Если я ищу по Джон Я вижу все Джон по если я ищу Смита Я вижу все Смита Я бы хотел найти Джона Смита и просмотреть все Джона Смита ,Спасибо

ОБНОВЛЕНИЕ: Я должен был сделать мой оригинальный пост более понятным.Я использую vb.net, и когда пользователь вводит поисковый запрос в текстовое поле, фактический запрос выполняется следующим образом:

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + @SearchTerm + '%'
ORDER BY FullName

Я хочу, чтобы пользователь мог вводить: John S и посмотреть всех пользователей по имени John с фамилией S.

Ответы [ 5 ]

2 голосов
/ 30 января 2011
SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName LIKE '%john%'
AND Surname LIKE '%smith%'
ORDER BY FullName;
1 голос
/ 30 января 2011

Исходя из предостережений и условий в ваших комментариях к другим вопросам, ваша лучшая ставка будет состоять из двух полей поиска (имя и фамилия) и составить запрос, который будет выглядеть примерно так.

SELECT   MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName like N'%' + @SearchFirst + '%' AND
      Surname LIKE N'%' + @SearchSurname + '%'
ORDER BY FullName

В качестве альтернативы вы можете попытаться вручную разобрать одно поле поиска по имени и фамилии, прежде чем вставлять значения в ваш запрос. Но синтаксический анализ имен - это очень рискованное дело, к которому не относятся легко.

0 голосов
/ 30 января 2011

Если у вас нет таких данных:

     Firstname              |  Lastname
     John Stewart           |  Mill

ваш запрос выше с Searchterm = '% John M%' найдет всех Джонов, чья фамилия начинается с M, при условии, что вы объедините пробел:

           where firstname + ' ' + lastname like '%John S%'

Однако вы не добьетесь высокой производительности с запросами типа CONTAINS-SUBSTRING (то есть с подстановочными знаками по обе стороны поискового запроса).Запуски с запросами могут использовать индекс, поэтому лучше написать:

     where firstname = 'John'    -- can use an index on firstname column
     and lastname like 'S%'      -- can use an index on lastname column
0 голосов
/ 30 января 2011
SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + ' ' + Surname LIKE N'%' + SearchTerm + '%'
ORDER BY FirstName

Здесь SearchTerm может быть любым Джон Смит, Или же Джон С, Или же Джон, Или просто J

0 голосов
/ 30 января 2011
SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + 'Smith' + '%'
ORDER BY FullName

Ладно, я попытаюсь разобраться с этим. Предполагая, что вы хотите найти фамилию и имя.

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName='John' AND Surname='Smith'
ORDER BY FullName

Будет ли это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...