2014-03-03 35 views
0

JOIN語句存在問題。MySQL幫助清理總計數

我試圖讓每名共有,而不是目前的1噸的其他同名記錄

SELECT a.`name`, 
    (SELECT COUNT(b.`id`) 
    FROM `host1_hosting` AS b 
    WHERE b.`id` = c.`host1_servers_host1_hosting_1host1_hosting_idb`) AS HostingCount 
FROM `host1_servers` AS a 
LEFT JOIN `host1_servers_host1_hosting_1_c` AS c ON c.`host1_servers_host1_hosting_1host1_servers_ida` = a.`id` 
ORDER BY a.`name` 

例子返回的

名稱HostingCount

名稱1

名稱1

名稱1

,它應該是:

名稱3

我敢肯定,這是簡單的,但它的早期星期一,我雲裏霧裏

查詢2

SELECT a.`name`, COUNT(d.`id`) 
FROM `host1_servers` AS a 
JOIN `host1_servers_host1_hosting_1_c` AS c ON c.`host1_servers_host1_hosting_1host1_servers_ida` = a.`id` 
JOIN `host1_hosting` AS d ON d.`id` = c.`host1_servers_host1_hosting_1host1_hosting_idb` 
ORDER BY a.`name` 

給我1個名字記錄,但總共爲COUNT

回答

1

你的第二個查詢需要一個group by

SELECT a.`name`, COUNT(d.`id`) 
FROM `host1_servers` AS a 
JOIN `host1_servers_host1_hosting_1_c` AS c ON c.`host1_servers_host1_hosting_1host1_servers_ida` = a.`id` 
JOIN `host1_hosting` AS d ON d.`id` = c.`host1_servers_host1_hosting_1host1_hosting_idb` 
GROUP BY a.name 
ORDER BY a.`name`; 

沒有GROUP BY,MySQL的解釋查詢作爲聚合查詢產生一行。總數爲count()name這一列是從一行中任意選擇的(使用MySQL擴展,它不適用於任何其他數據庫)。

編輯:

如果你想保留的所有名稱從第一個表,做計數,使用left outer join

SELECT a.`name`, COUNT(d.`id`) 
FROM `host1_servers` a LEFT OUTER JOIN 
    `host1_servers_host1_hosting_1_c` c 
    ON c.`host1_servers_host1_hosting_1host1_servers_ida` = a.`id` LEFT OUTER JOIN 
    `host1_hosting` d 
    ON d.`id` = c.`host1_servers_host1_hosting_1host1_hosting_idb` 
GROUP BY a.name 
ORDER BY a.`name`; 
+0

確定。但是現在我沒有可能沒有計數的a.name的任何記錄 – Kevin