简体   繁体   中英

Self join get records comparing data from same table

I have 2 tables SchoolMembers and SchoolDetails

SchoolMembers

School  SchoolMember
KGB1    KGB1
KGB1    KGB2
KGB1    KGB3

and SchoolDetails

id  schoolMember  type            YearJoining   PeriodJoining
136 KGB1          Principal       2016          17001
137 KGB2          SubPrinciple    2016          17001
138 KGB1          SubPrinciple    2016          17001
139 KGB3          Teacher         2016          17004
140 KGB4          Teacher         2018          17004

I have to get school member for all Schools which is having SchoolDetails type teacher having Yearjoining or period joining after Principle.

I am unsure about how to do this, I tried this using self join but no luck.

Expected result as 139 has period greater than Principal.

139 KGB3    Teacher 2016    17004

Try with below query.

SELECT *
FROM SchoolMembers SM1
    INNER JOIN SchoolDetails SD1
        ON SD1.schoolMember = SM1.schoolMember AND SD1.type = 'teacher'
    INNER JOIN SchoolMembers SM2
        ON SM1.School = SM2.School
    INNER JOIN SchoolDetails SD2
        ON SD2.schoolMember = SM2.schoolMember AND SD2.type = 'Principal'
WHERE SD1.YearJoining > SD2.YearJoining
    OR SD1.PeriodJoining > SD2.PeriodJoining

Please use below query,

select SD1.id,SM.schoolMember,SD1.type,SD1.YearJoining,SD1.PeriodJoining from 
SchoolMembers SM
inner join SchoolDetails SD1
on (SM1.schoolMember = SD.schoolMember)
inner join SchoolDetails SD2
on (SD1.id = SD2.id)
where (SD1.YearJoining > SD2.YearJoining) 
  or(SD1.PeriodJoining > SD2.PeriodJoining );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM