以下场景的查询是什么

时间:2014-02-12 14:06:11

标签: sql

Universal Market Corp.已使用数据库架构组织其运营 这里描述。列出的客户本身就是订购量大的零售企业 来自通用市场公司的各种产品的大量转售。不同 customers表中的客户由cid(客户)中的值唯一标识 标识符)列。客户致电代理商(由援助人员唯一识别) 代理表中的值)。每次下订单时,都会在中插入一个新行 订单表,由ordno值唯一标识。

表架构: -

Customers (cid, cname, city, discount)

Agents (aid, aname, city, percent)

Products (pid, pname, city, quantity, price)

Orders (ordno, month, cid, aid, pid, qty, dollars)

根据上面显示的架构,回答以下问题。

  1. 获取与其中一个代理商存储在同一城市的产品的pnames和pids 谁卖了这些产品
  2. 通过代理商下订单,获取所有客户订购的产品 “A03”

1 个答案:

答案 0 :(得分:-1)

我试图以易于理解的形式编写查询(忽略性能)。

<强> 1

SELECT pname, pid
FROM   Products
WHERE  EXISTS (
    SELECT 1
    FROM   Orders
           INNER JOIN Agents ON Agents.aid = Orders.aid
    WHERE  Orders.pid = Products.pid
           Agents.city = Products.city
)

这意味着以下内容:列出产品所在城市代理商所采取的相应(第一个条件)订单的所有产品(第二个条件)。


<强> 2

SELECT DISTINCT Orders.pid
FROM   Orders
WHERE  Orders.cid IN (
    SELECT DISTINCT OrdersThroughA03.cid
    FROM   Orders AS OrdersThroughA03
    WHERE  OrdersThroughA03.aid = 'a03'
)

此查询首先获取通过 a03 (在括号中)订购的所有客户,然后列出所有不同的产品(DISTINCT表示它将仅显示每个产品一次)订购由这些人。我在内部查询中为OrdersThroughA03添加了一个表别名(Orders),以避免使用不明确的列名。