2015-09-21 3 views
-1

У меня проблема с кодом SQL.Проблема с подзапросом SQL 3

Когда я запускаю этот код я получаю такую ​​ошибку: электронного письмо

**

Subquery вернулся более чем на 1 значение. Это недопустимо, если подзапрос следует за =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

**

Я не знаю, как исправить этот код, чтобы запустить его?

Может ли кто-нибудь взглянуть на него и помочь мне с ним?

Спасибо за вашу помощь,

SELECT dbo.FRA$.[GUID], dbo.FRA$.[Last Name], 

dbo.FRA$.[First Name], dbo.FRA$.[HR Manager Last Name], 

dbo.FRA$.[HR Manager First Name], (SELECT dbo.FRA$.[Business Email Address] FROM dbo.FRA$ t WHERE t.[HR Manager ID] = t.[Emplid]) AS [HR Manager E-Mail], 

dbo.LOC.Descr AS [COMPANY NAME], dbo.FRA$.[Location Code], 

dbo.LOC.[ADDRESS], dbo.LOC.Postal, dbo.LOC.City, dbo.FRA$.[National ID], dbo.FRA$.[Current Employee Class Desc] AS [Current Empl Class], 

dbo.FRA$.[Contract type description] AS [CONTRACT TYPE], dbo.FRA$.[Business Title], 

CASE dbo.FRA$.[Current Employee Class Desc] 
WHEN 'Operator' THEN 10 
WHEN 'Clerical worker' THEN 22 
WHEN 'Technician' THEN 32 
WHEN 'Supervisor' THEN 33 
WHEN 'Manager&Engineer' THEN 54 
END AS [Salary brutto], 

FORMAT(dbo.FRA$.[Birthdate],'yyyy-MM-dd') AS [Birth Date], FORMAT(dbo.FRA$.[Last Start Date],'yyyy-MM-dd') AS [Hire Date] 

FROM dbo.FRA$ 

INNER JOIN dbo.LOC 

ON dbo.FRA$.[Location Code] = dbo.LOC.[Location] 

WHERE [HR Status] IN ('International Assignment','Active','Leave of Absence'); 
+0

И этот запрос должен работать на MySQL и MS SQL Server и Sqlite ??? – jarlh

ответ

0

Попробуйте заменить

SELECT dbo.FRA$.[Business Email Address] FROM dbo.FRA$ t WHERE t.[HR Manager ID] = t.[Emplid] 

с

SELECT TOP 1 t.[Business Email Address] FROM dbo.FRA$ t WHERE [HR Manager ID] = t.[Emplid] 

он будет принимать только одну строку из строк, возвращенных вашим подзапроса

+0

Привет, Димитрий, Спасибо за помощь. Я попытался, и у меня получилось, что код показывает мне письмо сотрудника, а не адрес электронной почты менеджера по персоналу? – MIREK

+0

привет Мирек. Я отредактировал свой ответ. Вы должны привязать 't. [Emplid]' от таблицы подзапроса к '[HR Manager ID]' из основной таблицы. Просто удалите 't.' или лучше сделайте псевдоним для главной таблицы. –

+0

Привет, Дмитрий, я исправил этот SELECT TOP 1 dbo.FRA $. [Business Email Address] FROM dbo.FRA $ t WHERE dbo.FRA $. [HR Manager ID] = t. [Emplid]) AS [HR Manager E-Mail], но все еще получая электронную почту от сотрудника, а не менеджера по персоналу? – MIREK

Смежные вопросы