sql >> Database >  >> RDS >> Sqlserver

Vang meerdere soorten gegevens in SQL Server

Dus - het lijkt erop dat je een vreemd georganiseerde taaktabel hebt, en als gevolg daarvan zul je enigszins rare dingen moeten doen om de juiste query te krijgen. Volgens uw beschrijving bevat een rij in de taaktabel een studentId, een AdmissionId, een enquiryId of een enquiryDetailId. Dit is niet de optimale manier om dit te doen... maar ik begrijp dat je soms moet rondkomen met wat je hebt.

Dus om de namen te krijgen, moet je lid worden van de bron van de namen... en ervan uitgaande dat ze overal voorkomen, in gerelateerde tabellen, zou je zoiets kunnen doen als:

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

...of je kunt hetzelfde binnenstebuiten bereiken:

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


  1. Waarom werkt de pi()-functie niet in Oracle met de JDBC-driver?

  2. Een database verbinden met Python

  3. Hoe een grootboek/T-account aan te maken met PHP Mysql

  4. Hoe waarden van twee rijen in MySQL te wisselen zonder de unieke beperking te schenden?