【发布时间】:2019-01-20 05:47:54
【问题描述】:
我有数据库,在其他表中我有这个:
CREATE TABLE `Physiotherapist`(
`pid` INT,
`name` VARCHAR(40),
`hours` INT,
`cid` INT
我想编写一个 SQL 查询,该查询返回在同一诊所工作的一对物理治疗师的列表,但会 不返回重复项。到目前为止,我的回答是:
SELECT p1.name AS name1, p2.name AS name2
FROM Physiotherapist p1
INNER JOIN Physiotherapist p2 on p2.cid = p1.cid AND p1.name != p2.name
或使用自连接的替代解决方案:
SELECT p1.name, p2.name
FROM Physiotherapist p1, Physiotherapist p2
WHERE p1.cid = p2.cid AND p1.name !=(SELECT p2.name)
无论如何我都会得到这个结果:
name1: name2:
Jan Christensen Ira Assent
Ira Assent Jan Christensen
即同一对。我只想要一个副本,因为它们显示相同的信息,但我想不出一种方便的方法来做到这一点。
编辑:带有示例数据的完整数据库代码
DROP TABLE IF EXISTS Physiotherapist;
CREATE TABLE `Physiotherapist`(
`pid` INT,
`name` VARCHAR(40),
`hours` INT,
`cid` INT
);
INSERT INTO Physiotherapist VALUES('123','Ira Assent','8','1');
INSERT INTO Physiotherapist VALUES('246','Annika Schmidt','1','2');
INSERT INTO Physiotherapist VALUES('327','Jan Christensen','5','1');
INSERT INTO Physiotherapist(`pid`,`name`) VALUES('455','Simon Winter');
DROP TABLE IF EXISTS Clinic;
CREATE TABLE `Clinic`(
`cid` INT,
`name` VARCHAR(40),
`address` VARCHAR(40)
);
INSERT INTO Clinic VALUES ('1','PhysCentral','Aarhus C');
INSERT INTO Clinic VALUES ('2','PhysIOgnomy','Aarhus N');
INSERT INTO Clinic VALUES ('3','Physios','Aarhus V');
DROP TABLE IF EXISTS Appointment;
CREATE TABLE `Appointment`(
`aid` INT,
`date` DATE,
`time` INT,
`pid` INT
);
INSERT INTO Appointment VALUES(34716,'2018-06-12','10','246');
INSERT INTO Appointment VALUES(23118,'2018-08-18','11','327');
INSERT INTO Appointment VALUES(88223,'2018-10-03','9','246');
【问题讨论】:
-
添加更多示例表数据,以及新的预期结果。
-
样本数据和预期输出有助于指导
-
我添加了包含所有示例数据的完整表格
-
您的预期结果是什么?
-
要么 (Jan Christensen - Ira Assent) 要么 (Ira Assent - Jan Christensen),但不能同时使用。如前所述,我想编写一个 SQL 查询,该查询返回在同一诊所工作但不会返回重复的物理治疗师对的列表。
标签: sql join duplicates self