我有一个关系模式,有三个关系:
关系产品与属性(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)以及如何处理这些变量感到困惑。有人可以解释如何逐步进行此查询吗?它是"三倍"加入与否?
答案 0 :(得分:1)
向我展示雅典每个项目中使用的产品
相当于
向我展示雅典没有项目不使用该产品的产品。
最后一句话是 完全 上面的查询所说的内容。
SELECT p.pname -- Show me the products
FROM product p
WHERE NOT EXISTS -- where there is **no** project
(SELECT *
FROM project j
WHERE j.city = 'athens' -- in Athens
AND NOT EXISTS -- that does not use
(SELECT * FROM spj
WHERE spj.pid = p.pid -- that product
AND spj.jid = j.jid))