2012-10-25 290 views
0

幫助有兩個表:需要你的SQL查詢

  • 客戶id, name
  • 訂單id, id_client, name),其中id_client - 外鍵。

編寫一個查詢,選擇第一個表的標識符和名稱以及與它們關聯的第二個表中的記錄數。結果應按姓氏降序排列。

我已經試過

SELECT 
    Clients.id, Clients.name, count(id) 
FROM clients 
INNER JOIN Order ON Clients.id = Order.id_client 
GROUP BY 
    Clients.id, Clients.name 
ORDER BY 
    Clients.name DESC 

但它不工作。哪裏不對?

+2

定義「它(原文如此)不起作用」 – LittleBobbyTables

+3

兩個詞:左連接。更多的話:'Order'是一個保留字,而LEFT JOIN的替代是SELECT中的一個標量子查詢。 – RichardTheKiwi

+2

你是什麼意思*它不起作用*?!?!?你會得到一個錯誤 - 如果是的話:**什麼**錯誤?你只是沒有結果? 「錯誤」的結果?如果是這樣:**爲什麼**他們是錯的 - 你期望什麼? –

回答

3
SELECT 
c.ID, 
c.Name, 
COUNT(o.ID) 
FROM 
Clients c 
LEFT JOIN [Order] o 
ON 
o.id_client = c.id 
GROUP BY 
c.ID, 
c.Name 
ORDER BY 
c.Name DESC 
+0

您錯過了一個訂單 – RichardTheKiwi

0

SELECT Clients.id,Clients.name,計數(client.id)來自客戶端的INNER JOIN上Clients.id = Order.id_client GROUP BY Clients.id,Clients.name ORDER BY Clients.name倒序

0

變化count(id)

count(Clients.id)count(Order.id)

我不知道你需要count(id)哪個表。我希望你明白問題出在哪裏。

+0

在這種情況下沒有任何區別 –

0
SELECT 
c.ID, 
c.Name, 
COUNT(o.ID) 
FROM 
Clients c, 
Order o 
WHERE o.id_client = c.id 
GROUP BY 
c.ID 
c.Name 
+1

'join'語法更具可讀性,這是在幕後執行連接的舊方法。 – JonH

+0

此外,它還沒有包括「Order」表名稱。 – LittleBobbyTables