2011-03-26 74 views
1

我有兩張桌子。名稱表有一個名爲'categories'的外鍵。另一個表是包含類別名稱的「類別」。名稱表引用類別表中的類別。如何在SQL中將兩個表連接在一起?

所以我用這個:

$categories = "SELECT name, COUNT(*) category"; 
$number_of_categories = "SELECT category, COUNT(1) FROM name GROUP BY category"; 

正如你所看到的,我做兩個SELECT語句。我聽說加入表可以做魔術,請教我如何在一個SELECT語句中做到這一點。

基本上我想從類別表中選擇所有行,然後計算名稱表中每個類別的實例數。

+0

聲明1中是否缺少'FROM'?我們可以看到2個表的完整模式嗎? – 2011-03-26 21:48:14

回答

3
SELECT c.name, COUNT(n.category) AS count_in_name_table 
FROM categories c 
LEFT JOIN name n ON n.category = c.name 
GROUP BY c.name 
+0

缺失類別的總數量? – Andomar 2011-03-26 21:10:50

+0

@Andomar - 我正在處理最後一句「基本上我想要從類別表中選擇所有行,然後計算名稱表中每個類別的實例數。」儘管如此,這是一個令人困惑的問題。 – 2011-03-26 21:11:44

1

你能數名在子查詢數量:

select category.name 
,  (
     select count(*) 
     from category 
     ) as CategoryCount 
,  (
     select count(*) 
     from name 
     where name.category = category.name 
     ) as NameCount 
from category 
1

假設類別表的名稱是「分類」(與CATEGORY_NAME和CATEGORY_ID)及名稱表的名稱是「名稱」(帶有name_id和category_id):

SELECT C.category_name, COUNT(N.name_id) FROM Category C 
LEFT JOIN Name N ON C.category_id=N.category_id 
GROUP BY C.category_name 

該分組允許您計算每個分類名稱的所有名稱條目。

0

您可能有一個糟糕的設計。

  • 名稱表有一個外鍵「類別」。
  • 「類別」表包含類別的名稱。
  • 名稱表引用類別表中的類別。

這兩個表是否相互引用?或者它只是普通名稱'名稱'和'類別'的結果?

如果你有一個1:1的關係,也就是說,每個類別都有一個名字,每個名字都是一個類別,你可以把它們放在一個表中。

如果您有1:n關係,則一個類別綁定到多個名稱,該關係將在類別表中指定。如果這是一個n:1的關係,反過來。

我想我們需要一些樣本數據或更多的解釋,以成爲一個真正的幫助。

相關問題