对sql查询感到困惑

时间:2013-04-25 11:09:18

标签: sql postgresql-9.2

我有以下表格:

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在伦敦销售

如果可用的城市只有纽约和伦敦,则唯一必须是查询结果的产品是产品1

3 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

不确定你到底想要做什么。

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

您仍需要Product表来显示产品表。

此查询排除了产品表

答案 2 :(得分:0)

假设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