多个相关的SQL查询

时间:2014-05-13 19:50:58

标签: sql select join tuples database-schema

我有一个关系模式,有三个关系:
关系产品与属性(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)以及如何处理这些变量感到困惑。有人可以解释如何逐步进行此查询吗?它是"三倍"加入与否?

1 个答案:

答案 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))