【发布时间】:2014-07-01 15:54:41
【问题描述】:
我有一个包含三个关系的关系模式:
具有(pid, pname, color, weight, city) 属性的关系产品
具有(jid, jname, city) 属性的
关系项目
Spj 与属性 (sid, pid, jid, quantity)
每个表都有一些元组。这不是一个现实的问题,而是一个关于 SQL 查询的练习。我需要找到的查询结果(由 3 个相关查询组成)如下:
SELECT p.pname
FROM product p
WHERE NOT EXISTS
(SELECT *
FROM project j
WHERE j.city = 'athens'
AND NOT EXISTS
(SELECT *
FROM spj
WHERE spj.pid = p.pid
AND spj.jid = j.jid));
我开始计算较低的查询,认为这是 3 个表之间的连接,但即使从一开始(我从连接 Spj 和 Project 表开始)我最终得到了一个包含 14 个元组的大表。所以,我认为我可能走错了方向。
我对两个元组变量(产品 p、项目 j)以及如何处理这些变量感到困惑。有人可以解释如何逐步进行此查询吗?是不是“三重”连接?
【问题讨论】:
-
这是“向我展示雅典每个项目中使用的产品”你到底有什么问题?
-
它们被称为“相关”子查询,而不是“级联”。正如@CharlesBretana 提到的,这是一个关系划分问题/查询。
-
@CharlesBretana 正如我上面所说,我的问题是我无法一步一步地进行这个查询来理解它是“向我展示雅典每个项目中使用的产品”的部门。你能更详细地解释一下你是如何分析这个查询的以及如何从这个模式中检索正确的元组吗?
标签: sql select join tuples database-schema