在继承案例中使用UNION和JOIN-MySQL

在继承案例中使用UNION和JOIN-MySQL,mysql,inheritance,join,mysql-workbench,union,Mysql,Inheritance,Join,Mysql Workbench,Union,上述视图返回了正确的结果,但医生和捐赠者的姓名在“医生姓名”标签下的一列中。 我的问题是: 有没有办法我可以创建两个单独的列一个显示医生的名字,第二个显示捐赠者的名字 谢谢。您需要将所有表合并在一起,以便使用健康检查表确定关系,从医生的个人记录到捐赠者的个人记录。可能是这样的: CREATE TABLE Person (#Superclass PPS varchar(9) NOT NULL PRIMARY KEY, fName varchar(20) NOT NULL, lName varcha

上述视图返回了正确的结果,但医生和捐赠者的姓名在“医生姓名”标签下的一列中。 我的问题是: 有没有办法我可以创建两个单独的列一个显示医生的名字,第二个显示捐赠者的名字


谢谢。

您需要将所有表合并在一起,以便使用健康检查表确定关系,从医生的个人记录到捐赠者的个人记录。可能是这样的:

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;
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