2013-04-25 111 views
0

我有以下表困惑:與SQL查詢

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 

我需要證明已在ALL城市已售出的產品。

例子:在紐約出售

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

+4

產品表在哪裏?如果沒有產品表,則無法選擇產品詳細信息。 – SpaceApple 2013-04-25 11:12:06

+3

另外...你試過了什麼? – 2013-04-25 11:13:40

+0

城市信息是在客戶的桌子 – Popito 2013-04-25 11:17:30

回答

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表顯示產品表。

這查詢不包括產品表

+0

我想展示已在所有城市銷售的產品。不是城市 – Popito 2013-04-25 11:18:58

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) 
+0

'HAVING COUNT(DISTINCT a.ID)'也可以改成'HAVING COUNT(DISTINCT a.ordNo)'see here http://www.sqlfiddle.com/#!12/8d330/12 – 2013-04-25 11:37:55

+0

this答案非常感謝你 – Popito 2013-04-25 11:46:27

0

假設產品表是這樣的:

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