2013-05-20 25 views
2

我使用PostgreSQL數據庫中的三個表爲:獲取使用組多個表中的數據通過

Customer(Id, Name, City), 
Product(Id, Name, Price), 
Orders(Customer_Id, Product_Id, Date) 

,我想執行一個查詢從他們那裏得到「那些已經在訂購的客戶至少有兩種不同的產品與產品共存「。我寫的查詢是:

select c.*, p.* 
from customer c 
join orders o on o.customer_id = c.id 
join product p on p.id = o.product_id 
group by (c.id) 
having count(distinct o.product_id)>=2 

它引發錯誤:

「列‘p.id’必須出現在GROUP BY子句或聚合函數 LINE 1中:select c.*, p.*」。

但是,如果我刪除了第*從select語句(假設我一個人不想要的產品,只有客戶),它運行良好。我怎樣才能獲得產品?

更新:訂購了兩個或更多產品後,客戶必須在其輸出的產品上出現其所訂購產品的次數。我想作爲輸出表5列:

Cust ID | Cust Name | Cust City | Prod ID | Prod Name | Prod Price 

是否有可能在SQL因爲group by應該使用?建議立即進行刪除它可以在不同的表多個列中使用?

+0

你能張貼所需的輸出? – peterm

+0

請提供良好的信息。 – Anvesh

回答

1

我認爲你可以使用下面的查詢對這個問題 -

SELECT C1.*, p1.* 
    FROM Customer C1 
    JOIN Orders O1 ON O1.Customer_Id = C1.Id 
    JOIN Product P1 ON P1.Id = O1.Product_Id 
WHERE C1.Id IN (SELECT c.Id 
        FROM Customer c 
        JOIN Orders o ON o.Customer_Id = c.Id 
        GROUP BY (c.Id) 
       HAVING COUNT(DISTINCT o.Product_Id) >= 2) 
2

嘗試了這一點:

選擇不同的C * P *
從客戶C
JOIN
。      (SELECT o.customer_id CID
      FROM產品零件
      JOIN級O
      ON p.id = o.product_id
      GROUP BY o.customer_id
      HAVING COUNT(DISTINCT o.product_id)> = 2)的cp
ON c.id = cp.cid
JOIN級O
上c.id = o.customer_id
JOIN產品p
ON o.product_id = p.id

我希望它可以解決你的問題。

相關問題