Member 14641515 Ответов: 4

Как я могу использовать оператор like, следующий за подзапросом?


работник стол(ССН,имени,)
таблица иждивенцы(ESSN,имя иждивенца)

как я могу получить имена сотрудников, которые похожи на любое зависимое имя

используя вложенный запрос и как только оператор

Что я уже пробовал:

Выберите [Fname]
От [dbo].[Работник]
Где '%'+[Fname]+'%' LIKE (SELECT [Dependent_name] FROM [dbo].[Зависимый])

я пробовал это сделать, но знаю, что это неправильно
потому что возврат-это больше, чем одно значение!

Richard MacCutchan

Вы должны взять Dependent_name из пользовательского ввода, удалить предложение sub SELECT и просто сопоставить его со строкой.

4 Ответов

Рейтинг:
36

RickZeeland

Нашел !

SELECT [Dependent_name] FROM [Dependent],[Employee]
WHERE [Dependent].[Dependent_name] LIKE '%' + [Employee].[Fname] + '%'


Member 14641515

Простое решение, но умное, чтобы
проверьте оператор Like таким образом
Мы всегда используем = для отображения между таблицами в соединениях

Спасибо вам, дорогие 😊👏

Рейтинг:
1

phil.o

Насколько я понимаю, зависимость должна быть отношением таблицы employee к самой себе (отношением "многие ко многим").

TABLE employee
   SSN,   -- the id of the employee
   Fname -- the name of the employee

TABLE dependant
   ResponsibleSSN, -- the id of the employee being depended on
   DependantSSN    -- the id of the employee being dependant
В таком контексте зависимая таблица не должна содержать никакого имени, а только внешний ключ к соответствующему сотруднику в таблице employee.

Запрос на ваше требование может быть затем
SELECT DISTINCT
  e.FName
FROM
 employee e
 INNER JOIN dependant d on d.DependantSSN = e.SSN
С помощью LIKE в этом контексте это означало бы, что вы заранее знаете ценность, которую ищете, и не имеет особого смысла.
Или, может быть, я совершенно неправильно понял вашу цель?


Member 14641515

Я не хочу знать имя сотрудника с именем его иждивенцев нет

Я хочу показать имена сотрудников в случае необходимости.
Имя сотрудника похоже на имя иждивенцев независимо от того является ли этот иждивенец для этого сотрудника или нет

E1 мина
Е2 Керо
E3 Кевин

Отдел emp 1-это Рауль Кевин
Отдел для ссн 2-Лео
Отдел emp 3-это Самир мина

Поэтому я хочу, чтобы результат был
Мина
Кевин

Richard MacCutchan

Вы должны поместить эту информацию в свой вопрос, чтобы было ясно, что вы пытаетесь сделать.

Рейтинг:
0

RickZeeland

Это работает, но вернет только одно имя, к сожалению:

SELECT [Dependent_name]
FROM [dbo].[Dependent]
WHERE [Dependent_name] LIKE 
  '%' + (SELECT TOP 1 [Fname] FROM [dbo].[Employee]) + '%'


Member 14641515

Это не может решить проблему, потому что
Я хочу получить имена сотрудников, которые похожи на ((((любое))) иждивенческое имя

Задача состоит в том, чтобы решить, используя только like и sub query

RickZeeland

Единственное, что я могу придумать, это использовать курсор, см.: http://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-cursor/

Рейтинг:
0

Richard Deeming

Другим вариантом было бы использовать Exists:

SELECT [Fname]
FROM [dbo].[Employee]
WHERE Exists
(
    SELECT 1
    FROM [dbo].[Dependent]
    WHERE [Dependent].[Dependent_name] LIKE '%' + [Employee].[Fname] + '%'
)
EXISTS (Transact-SQL) - SQL Server | Microsoft Docs[^]