2011-11-23 89 views
0

我有以下MySQL查詢:MySQL查詢與「LEFT JOIN」,其中a.key = b.key

SELECT categories.key, categories.name, count(*) as itemsCount 
    FROM categories 
     LEFT JOIN designs 
      ON categories.key = designs.category 
    GROUP BY categories.name ASC 

它確實選擇所有類別和計數的設計屬於#的工作每個類別。但是,我的應用程序和數據庫設置爲,如果「designs」表中的「category」字段的值爲「0」,則此設計屬於虛擬(「categories」中沒有key = 0的類別)表)「unassigned」類別。

我的問題是... 是否可以修改我的查詢來計算不屬於任何現有類別的設計?

也許我是過於複雜的事情,用「0」鍵添加一個類別要容易得多,但爲了學習,也許有更好的方法?

謝謝。

+0

你可以嘗試'RIGHT JOIN' – Benjam

+0

所以0一類具有關鍵意義? – Maess

+0

@Maess它有一個含義,但它不存在於「類別」表中。 – MarkL

回答

2
SELECT d.category, c.name, COUNT(d.category) 
FROM (
     SELECT 0 AS key, 'VIRTUAL' AS name 
     UNION ALL 
     SELECT key, name 
     FROM categories 
     ) c 
LEFT JOIN 
     designs d 
ON  d.category = c.key 
GROUP BY 
     c.key 
+0

超級элегантно。謝謝! – MarkL

2

這只是一個快速的方法來達到你要找的東西,我敢肯定有更聰明的東西。

SELECT categories.key, categories.name, count(designs.category) as itemsCount 
FROM categories 
    LEFT JOIN designs 
     ON categories.key = designs.category 
GROUP BY categories.key ASC 
UNION ALL 
SELECT 0,'VIRTUAL',COUNT(*) AS itemsCount 
FROM designs 
WHERE category = 0 
+0

只是一些小的修改,使查詢更快,更正確:) – Quassnoi

+0

謝謝你們兩個。像魅力一樣工作。有時間探索UNION命令。 – MarkL

+0

謝謝@Quassnoi! – Dalen