I have this table
CREATE TABLE Person( IDPerson VARCHAR(10), name VARCHAR(50), PRIMARY KEY(IDPerson) );
Person
table is a general table which has these 2 specialization:
CREATE TABLE Physician( IDPhysician VARCHAR(10), specialty VARCHAR(50), PRIMARY KEY(IDPhysician), FOREIGN KEY(IDPhysician) REFERENCES Person(IDPerson) ); CREATE TABLE Volunteer( IDVolunteer VARCHAR(10), IDSupervisor VARCHAR(10), skill VARCHAR(30), PRIMARY KEY(IDVolunteer), FOREIGN KEY(IDVolunteer) REFERENCES Person(IDPerson), FOREIGN KEY(IDSupervisor) REFERENCES Physician(IDPhysician) );
I want to select data from physician and volunteer with the name of each person. Is there any possible way to do this?
Let’s say I have this example data:
Person:
IDPerson | Name |
---|---|
P001 | Andy |
P002 | Rudy |
P003 | Budy |
P004 | Khal |
P005 | Apho |
Phycisian:
IDPhysician | specialty |
---|---|
P004 | heart |
P005 | brain |
Volunteer:
IDVolunteer | IDSupervisor | skill |
---|---|---|
P001 | P004 | skill1 |
P002 | P004 | skill2 |
P003 | P005 | skill2 |
This is what I expect as an output:
IDVolunteer | Name | IDSupervisor | Name ------------|------|--------------|-------- P001 | Andy | P004 | Khal ------------|------|--------------|-------- P002 | Rudy | P004 | Khal ------------|------|--------------|-------- P003 | Budy | P005 | Apho ------------|------|--------------|--------
Advertisement
Answer
Check if this works for you.
SELECT V.IDVolunteer, P.name, V.IDSupervisor, Ph.name, FROM Volunteer V INNER JOIN Person P ON P.IDPerson = V.IDVolunteer INNER JOIN Person Ph ON Ph.IDPerson = V.IDSupervisor;