2016-08-17 54 views
0

嗯,我有三個表:從三個不同的表選擇的東西與內部聯接

車:

ID | Product | Quantity 
1 S1FG  3 
1 C0K0  1 
1 SLM1  6 
2 S1FG  2 
2 S94A  2 

產品:

Code | Price 
S1FG 10.00 
C0K0 8.00 
SLM1 19.50 
S94A 2.00 

而且用戶:

ID | Nickname 
1 Mark 
2 Steve 

我想這一點:

Nickname | Products | Total 
Mark  10   155.00 
Steve  4   24.00 

在的話,我想用戶的列表,在購物車的東西,他們的項目的數量和他們的項目的價格的總和。

我嘗試這樣做:

SELECT DISTINCT b.Nickname, SUM(a.Quantity) as Products, SUM(a.Quantity*c.Price) as Total 
FROM Cart a 
INNER JOIN Users b ON (a.ID = b.ID) 
INNER JOIN Products c ON (a.Product = c.Code) 

但它沒有工作...

我能做些什麼?

回答

1

您需要GROUP BY暱稱或者你只是得到一個單行:

SELECT DISTINCT b.Nickname, SUM(a.Quantity) as Products, SUM(a.Quantity*c.Price) as Total 
FROM Cart a 
INNER JOIN Users b ON (a.ID = b.ID) 
INNER JOIN Products c ON (a.Product = c.Code) 
GROUP BY b.Nickname 
+0

謝謝你,男人,像一個魅力工作c: – Malork

+0

很高興我能幫忙! – wogsland

0

這裏有兩個問題:

  1. 你是不是在一個規範化的形式:即你需要使主鍵唯一(自動增量對ID最簡單),然後在Cart表中爲(用戶ID)或其他內容創建一個列。這也適用於產品表:您有一個「代碼」列,但它是包含字母數字字符的varchar字段。不建議使用此方法,因爲索引varchar字段可能比int列佔用更多的時間。

  2. 您對查詢本身的邏輯:當您創建從一個表到另一個表的聯接或內部聯接時,您應該真正使用主鍵和輔助鍵來聯接您的表。

這兩個問題的結合使得這個特定的查詢相對困難。但是,如果你正常化你的桌子,那麼你將會取得進展。

+3

您沒有回答這個問題。你的一般建議也有錯誤。 – Marki555