2017-03-03 4 views
0
CREATE TABLE Person (#Superclass 
PPS varchar(9) NOT NULL PRIMARY KEY, 
fName varchar(20) NOT NULL, 
lName varchar(20) NOT NULL, 
DOB date NOT NULL, 
gender enum('M','F') NOT NULL DEFAULT 'M', 
email varchar(25) NOT NULL, 
contactNo varchar(10) NOT NULL, 
city varchar(10) NOT NULL, 
street varchar(20) NOT NULL 
); 

CREATE TABLE Donor (#Subclass 
PPS varchar(9) NOT NULL PRIMARY KEY REFERENCES Person(PPS), 
timesOfDonations int(1) NOT NULL DEFAULT '0' 
); 

CREATE TABLE Doctor(#Subclass 
PPS varchar(9) NOT NULL PRIMARY KEY REFERENCES Person(PPS), 
speciality varchar(20) NOT NULL, 
workHours int(3) 
); 

CREATE TABLE Health_Check (
hId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
bloodPressure varchar(7) NOT NULL, 
weight float(4,1) NOT NULL, 
height float(4,1) NOT NULL, 
heartRate int(3) NOT NULL, 
temprature float(3,1) NOT NULL, 
alcoholicTest enum('P','F') NOT NULL DEFAULT 'P', 
dateOfCheck date, 
doctorId varchar(9), 
donorId varchar(9) 
); 

ALTER TABLE Health_Check 
    ADD CONSTRAINT donorH_fk FOREIGN KEY (donorId) REFERENCES Donor (PPS) ON DELETE RESTRICT ON UPDATE CASCADE, 
    ADD CONSTRAINT doctor_fk FOREIGN KEY (doctorId) REFERENCES Doctor (PPS) ON DELETE RESTRICT ON UPDATE CASCADE; 

#List the doctors and the names of the donors they examined during the last week. 
CREATE VIEW DoctorsAndDonors AS 
SELECT * FROM (SELECT concat(fname, ' ', lName) AS'Doctor Name' FROM Person JOIN Doctor on Person.PPS=Doctor.PPS 
    JOIN Health_Check on Doctor.PPS = Health_Check.doctorId WHERE DATEDIFF(CURDATE(), dateOfCheck) BETWEEN 1 AND 7 
       UNION ALL 
    SELECT concat(fname, ' ', lName) AS'Donor Name' FROM Person JOIN Donor on Person.PPS=Donor.PPS 
     JOIN Health_Check on Donor.PPS = Health_Check.donorId WHERE DATEDIFF(CURDATE(), dateOfCheck) BETWEEN 1 AND 7) AS a; 

上記のVIEWは正しい結果を返していますが、医者とドナーの名前はラベル "医者名"の下の1列にあります。 私の質問です: 私は2つの別々の列を作成する方法がありますか?1つは医師の名前を示し、2つ目はドナーの名前を示しています。継承でJOINでUNIONを使用するケース - MySQL

ありがとうございました。

答えて

1

Health_Checkテーブルを使用してドナーのPersonレコードへのPERSONレコードから関係を判断するには、すべてのテーブルを一緒に参加させる必要があります。おそらく次のようなものでしょう:

SELECT 
    CONCAT (DoctorPerson.fname,' ',DoctorPerson.lName) AS 'Doctor Name', 
    CONCAT (DonorPerson.fname,' ',DonorPerson.lName) AS 'Donor Name' 
FROM Person as DoctorPerson 
    INNER JOIN Doctor ON DoctorPerson.PPS = Doctor.PPS 
    INNER JOIN Health_Check ON Doctor.PPS = Health_Check.doctorId 
    INNER JOIN Donor ON health_check.donorid = donor.PPS 
    INNER JOIN Person as DonorPerson ON Donor.PPS = DonorPerson.PPS 
WHERE DATEDIFF(CURDATE(), dateOfCheck) BETWEEN 1 AND 7 
関連する問題