【发布时间】:2021-09-15 02:20:24
【问题描述】:
所以我目前正在努力完成上述任务(大学作业)。
我需要找到一对拥有相同喜爱的鸡尾酒并且至少参加过一次相同活动的人 (p1.LASTNAME,p2.LASTNAME)。
所需的 Oracle 表是 PERSON 和 VISITED,它们看起来像这样:
CREATE TABLE PERSON
(
PID INT,
FIRSTNAME VARCHAR2(255) NOT NULL,
LASTNAME VARCHAR2(255) NOT NULL,
FAVCOCKTAIL INT,
PRIMARY KEY (PID),
FOREIGN KEY (FAVCOCKTAIL) REFERENCES COCKTAIL (CID)
);
CREATE TABLE VISITED
(
PID INT,
VID INT,
FOREIGN KEY (PID) REFERENCES PERSON (PID),
FOREIGN KEY (VID) REFERENCES VISITED (VID)
);
到目前为止,这是我的方法:
SELECT DISTINCT P1.LASTNAME, P2.LASTNAME, B1.VID, B2.VID, P1.FAVCOCKTAIL, P2.FAVCOCKTAIL
FROM PERSON P1,
PERSON P2,
VISITED B1,
VISITED B2
WHERE P1.FAVCOCKTAIL = P2.FAVCOCKTAIL
AND B1.VID = B2.VID
AND P1.LASTNAME != P2.LASTNAME;
现在,每当我阅读“至少一次”时,我都会考虑使用我尝试过但无法使其工作的 COUNT 函数,我尝试过的几种 JOIN 方法也是如此。
我确信这个问题有一个优雅的解决方案。从某种意义上说,我的方法更像是“蛮力”。
我们将不胜感激!
【问题讨论】:
-
JOIN。JOIN。JOIN。 从不在FROM子句中使用逗号。 -
除了使用过时的隐式连接语法而不是使用显式的
join子句之外,我认为您的解决方案没有问题。它实际上会产生错误的结果吗? -
样本数据会有很大帮助。
-
@GordonLinoff 我从不喜欢使用逗号分隔来构建笛卡尔积,因为它会产生如此多的冗余数据集,但这就是我们在 Uni 中学习的方式,但感谢您的回答我不认识您可以像这样使用 JOIN
标签: sql database oracle relational-database