Vì vậy - có vẻ như bạn có một bảng nhiệm vụ được tổ chức kỳ lạ, và kết quả là, bạn sẽ phải làm những việc hơi kỳ lạ để truy vấn đúng. Theo mô tả của bạn, một hàng trong bảng nhiệm vụ chứa một studentId, một entryId, một enquiryId hoặc một enquiryDetailId. Đây không phải là cách tối ưu để làm điều này ... nhưng tôi hiểu rằng đôi khi bạn phải cố gắng bằng những gì bạn có.
Vì vậy, để lấy tên, bạn phải kết hợp với nguồn của tên ... và giả sử chúng ở khắp nơi, trong các bảng liên quan, bạn có thể làm điều gì đó như:
select
t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Student s on t.StudentId = s.Id
union all
select
t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Admission a on t.AdmissionId = a.Id
union all
select
t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Enquiry e on t.EnquiryId = e.Id
union all
select
t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join EnquiryDetail d on t.EnquiryDetailId = d.Id
... hoặc, bạn có thể thực hiện điều tương tự từ trong ra ngoài:
select
t.StudentID,
t.AdmissionID,
t.EnquiryID,
t.EnquiryDetailsID,
x.FirstName,
x.LastName
from
Task t
inner join
(
select 's' source, Id, FirstName, LastName from Student union all
select 'a' source, Id, FirstName, LastName from Admission union all
select 'e' source, Id, FirstName, LastName from Enquiry union all
select 'd' source, Id, FirstName, LastName from EnquiryDetail
) as x
on
( t.StudentId = x.Id and x.source = 's' )
or
( t.AdmissionId = x.Id and x.source = 'a' )
or
( t.EnquiryId = x.Id and x.source = 'e' )
or
( t.EnquiryDetailId = x.Id and x.source = 'd' )
where
t.TaskUser=0 and t.BranchID=1