如果你只想要回一个专业,那么你可以使用聚合(最大/最小)功能:
Select P.ProfessionalID,
P.ProfessionalName,
max(S.SpecialtyName) SpecialtyName
from Professionals P
inner join ProfessionalSpecialtyRelation PR
on P.ProfessionalID = PR.ProfessionalID
-- and P.ProfessionalID = POR.ProfessionalID You are not joining to a table with POR alias
inner join Specialties S
on PR.SpecialtyID = S.SpecialtyID
where P.ProfessionalName Like '%arif%'
OR P.ProfessionalSurname Like '%%'
group by P.ProfessionalID, P.ProfessionalName;
或者因为你正在使用SQL Server,你还可以使用row_number()
函数返回只有一个每一行对应一个专业:
select ProfessionalID,
ProfessionalName,
SpecialtyName
from
(
Select P.ProfessionalID,
P.ProfessionalName,
S.SpecialtyName,
row_number() over(partition by P.ProfessionalID order by S.SpecialtyName) rn
from Professionals P
inner join ProfessionalSpecialtyRelation PR
on P.ProfessionalID = PR.ProfessionalID
-- and P.ProfessionalID = POR.ProfessionalID You are not joining to a table with POR alias
inner join Specialties S
on PR.SpecialtyID = S.SpecialtyID
where P.ProfessionalName Like '%arif%'
OR P.ProfessionalSurname Like '%%'
) d
where rn = 1;
注:我更改为使用ANSI JOIN语法查询(INNER JOIN),而不是逗号分隔的列表与WHERE子句中的联接。
如果他们有一个以上的专业,你想要结果是什么? – Taryn 2013-04-30 12:06:57
我只想得到那位教授的一行我需要唯一的ID – 2013-04-30 12:08:00
所以你只需要选择一个专业? – LuigiEdlCarno 2013-04-30 12:08:53