【问题标题】:Confused with sql query对sql查询感到困惑
【发布时间】:2013-04-25 19:48:48
【问题描述】:

我有以下表格:

Customer(login varchar, town varchar)
Orders (Ordno int , login varchar) >>login Fk from Customer
combination (Id int, ordno int ,Product_Id int) >>ordno fk from orders

我需要展示已在所有城市销售的产品。

例子:

Insert into Customer (log1 , NY) (log2, NY) (log3, London)
Insert into Orders (1,log1) (2,log1) (3,log3) 
Insert into combination (1,1,1) (2,2,2) (3,3,1) 
  • 产品 1 在纽约销售
  • 产品 2 在纽约销售
  • 产品 1 在伦敦销售

如果可用城市只有 NY 和 London,则必须是查询结果的唯一产品是产品 1

【问题讨论】:

  • 产品表在哪里?如果没有产品表,则无法选择产品详细信息。
  • 还有……你试过什么?
  • 城市信息在客户表中
  • @SpaceApple 询问的是产品而非城市...
  • 这似乎是一个留到最后一天的学校项目。

标签: sql postgresql-9.2


【解决方案1】:
SELECT  a.ProductID
FROM    Combination a
        INNER JOIN Orders b
            ON a.OrdNo = b.OrdNo
        INNER JOIN Customer c
            ON b.Login = c.LogIn
GROUP   BY a.ProductID
HAVING  COUNT(DISTINCT a.ID) = (SELECT COUNT(DISTINCT town) FROM Customer)

【讨论】:

【解决方案2】:

不确定你到底想在这里做什么。

SELECT c.Town, cc.Product_Id FROM from Customer c
JOIN Orders o ON c.login = o.login
JOIN Combination cc ON o.Ordno = cc.ordNo
GROUP BY c.town

这会将城镇组合在一起并向您显示 Product_Id

您仍然需要一个产品表来显示产品表。

此查询不包括产品表

【讨论】:

  • 我想展示已经在所有城市销售的产品。不是城市
【解决方案3】:

假设 Products 表如下所示:

Products (Product_Id int, Name)

您需要将东西一路向下(或向上)连接到客户......

SELECT p.Name, c.town
FROM Products p
  INNER JOIN Combination comb ON comb.Product_Id=p.Product_Id
  INNER JOIN Orders o ON o.Ordno=comb.ordno
  INNER JOIN Customer cust ON cust.login=o.login
GROUP BY p.Name, c.town

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多