显示具有公共列的行

时间:2018-09-06 08:51:01

标签: sql oracle

我需要显示患有咳嗽和失眠症的患者的姓名,因为它们不会显示在同一行上,因此我不能简单地使用AND命令。请帮助

我尝试搜索一个帖子,其中您在列中显示具有共同值的行,但我没有找到任何

model pic

CREATE TABLE Unit
(
    unitNumber VARCHAR(5),
    unitName VARCHAR(20),
    unitAddress VARCHAR(20),
    CONSTRAINT unit_pk PRIMARY KEY(unitNumber)
)

CREATE TABLE Employee
(
    empID VARCHAR(11),
    empName VARCHAR(20),
    empAddress VARCHAR(20),
    empPhoneNumber VARCHAR(10),
    empSalary INT,
    unitNumber VARCHAR(5),
    CONSTRAINT employee_pk PRIMARY KEY(empID),
    CONSTRAINT employee_unit_fk FOREIGN KEY(unitNumber) REFERENCES Unit(unitNumber)
)

CREATE TABLE Patient
(
    patientID VARCHAR(11) NOT NULL,
    patientName VARCHAR(20) NOT NULL,
    patientAddress VARCHAR(20),
    patientPhoneNumber VARCHAR(10),
    unitNumber VARCHAR(5),
    CONSTRAINT patient_pk PRIMARY KEY(patientID),
    CONSTRAINT patient_unit_fk FOREIGN KEY(unitNumber) REFERENCES Unit(unitNumber)
)

CREATE TABLE Examines
(
    empID VARCHAR(11),
    patientID VARCHAR(11),
    CONSTRAINT examines_pk PRIMARY KEY(empID,patientID),
    CONSTRAINT examines_employee_fk FOREIGN KEY(empID) REFERENCES Employee(empID),
    CONSTRAINT examines_Patient_fk FOREIGN KEY(patientID) REFERENCES Patient(patientID)
)

CREATE TABLE Illness
(
    illnessName VARCHAR(20),
    CONSTRAINT diagnose_pk PRIMARY KEY(illnessName)
)

CREATE TABLE Suffers
(
    illnessName VARCHAR(20) NOT NULL,
    patientID VARCHAR(11) NOT NULL,
    startDate DATETIME,
    CONSTRAINT suffers_pk PRIMARY KEY(illnessName, patientID),
    CONSTRAINT suffers_illness_fk FOREIGN KEY(illnessName) REFERENCES Illness(illnessName),
    CONSTRAINT suffers_Patient_fk FOREIGN KEY(patientID) REFERENCES Patient(patientID)
)

CREATE TABLE HasSuffered
(
    illnessName VARCHAR(20) NOT NULL,
    patientID VARCHAR(11) NOT NULL,
    CONSTRAINT HasSuffered_PK PRIMARY KEY(illnessName, patientID),
    CONSTRAINT hassuffered_illness_fk FOREIGN KEY(illnessName) REFERENCES Illness(illnessName),
    CONSTRAINT HasSuffered_PPNR_FK FOREIGN KEY(patientID) REFERENCES Patient(patientID)
)

CREATE TABLE Car
(
    licenseNumber VARCHAR(10) NOT NULL,
    brand VARCHAR(20),
    price int,
    empID VARCHAR(11) NULL,
    CONSTRAINT car_pk PRIMARY KEY(licenseNumber),
    CONSTRAINT car_employee_fk FOREIGN KEY(empID) REFERENCES Employee(empID)
)


INSERT INTO Unit VALUES('U1','General Surgery','Hospital road') 
INSERT INTO Unit VALUES('U2','Rehabilitation','Hospital road') 
INSERT INTO Unit VALUES('U3','Trauma','Care road')

INSERT INTO Employee VALUES('E1','Anna','Lund','111',25000,'U1')
INSERT INTO Employee VALUES('E2','Eva','Eslöv','222',55000,'U1')
INSERT INTO Employee VALUES('E3','Anna','Lund','333',37500,'U2')
INSERT INTO Employee VALUES('E4','Hans','Eslöv','444',18000,'U2')
INSERT INTO Employee VALUES('E5','Eva','Malmö','555',279000,'U3')
INSERT INTO Employee VALUES('E6','Peter','Dalby','666',32000,'U1')

INSERT INTO Patient VALUES('PP1','Anna', 'Lund','111','U1')
INSERT INTO Patient VALUES('PP2','Hans','Dalby','777','U1')
INSERT INTO Patient VALUES('PP3','Bo','Lund','888','U3')
INSERT INTO Patient VALUES('PP4','Peter','Lund','999','U3')
INSERT INTO Patient VALUES('PP5','Anna','London','100','U2')
INSERT INTO Patient VALUES('PP6','Anna','Berlin','111','U1')

INSERT INTO Examines VALUES('E1','PP1')
INSERT INTO Examines VALUES('E1','PP2')
INSERT INTO Examines VALUES('E1','PP3')
INSERT INTO Examines VALUES('E2','PP1')
INSERT INTO Examines VALUES('E2','PP3')
INSERT INTO Examines VALUES('E3','PP3')
INSERT INTO Examines VALUES('E3','PP4')
INSERT INTO Examines VALUES('E3','PP5')
INSERT INTO Examines VALUES('E4','PP5')
INSERT INTO Examines VALUES('E4','PP3')
INSERT INTO Examines VALUES('E4','PP4')

INSERT INTO Illness VALUES('Insomnia')
INSERT INTO Illness VALUES('Love sickness')
INSERT INTO Illness VALUES('Cough')
INSERT INTO Illness VALUES('Amnesia')
INSERT INTO Illness VALUES('Incontinence')
INSERT INTO Illness VALUES('Chickenpox')

INSERT INTO Suffers VALUES('Insomnia','PP1','1953-01-12')
INSERT INTO Suffers VALUES('Insomnia','PP2','2006-10-16')
INSERT INTO Suffers VALUES('Insomnia','PP3','1978-01-05')
INSERT INTO Suffers VALUES('Love sickness','PP1','2008-08-08')
INSERT INTO Suffers VALUES('Love sickness','PP2','2003-01-22')
INSERT INTO Suffers VALUES('Cough','PP4','1998-06-07')
INSERT INTO Suffers VALUES('Cough','PP3','1978-05-23')
INSERT INTO Suffers VALUES('Incontinence','PP6','1989-11-11')
INSERT INTO Suffers VALUES('Amnesia','PP6','2010-12-09')

INSERT INTO HasSuffered VALUES('Love sickness','PP1')
INSERT INTO HasSuffered VALUES('Love sickness','PP2')
INSERT INTO HasSuffered VALUES('Cough','PP3')
INSERT INTO HasSuffered VALUES('Cough','PP1')
INSERT INTO HasSuffered VALUES('Love sickness','PP3')
INSERT INTO HasSuffered VALUES('Cough','PP4')
INSERT INTO HasSuffered VALUES('Insomnia','PP3')
INSERT INTO HasSuffered VALUES('Insomnia','PP6')
INSERT INTO HasSuffered VALUES('Amnesia','PP6')

INSERT INTO Car VALUES('C1','saab',30000,null)
INSERT INTO Car VALUES('C2','saab',40000,'E1')
INSERT INTO Car VALUES('C3','volvo',50000,'E2')
INSERT INTO Car VALUES('C4','volvo',60000,'E3')
INSERT INTO Car VALUES('C5','audi',70000,'E4')
INSERT INTO Car VALUES('C6','audi',30000,null)
INSERT INTO Car VALUES('C7','saab',30000,'E5')

1 个答案:

答案 0 :(得分:1)

尝试按患者分组并计数患有两种疾病的患者:

SELECT  patientName
FROM    (
          SELECT    patientName,
                    COUNT(PatientName)
          FROM      Patient p
                    JOIN Suffers s
                      ON p.PatientID = s.PatientID
                    JOIN Illness i
                      ON i.IllnessName = s.IllnessName
          WHERE     i.illnessName = 'Cough' OR i.illnessName = 'Insomnia'
          GROUP BY  patientName
          HAVING    COUNT(PatientName) > 1
        ) p