2013-07-18 102 views
1

我知道這個問題可能已經回答了幾千次,但是我發現這個的每一個變化都不起作用。MySQL連接數從另一個表中匹配記錄

我所擁有的是2張表格,我希望它顯示所有結果的第一個表格,沒有「where」或任何限制它的地方。

第二個表我想匹配一個id到第一個表,它可以有多個引用它的行,所以我要計算這個數。

因此,可以說第一個表是這樣的:

ID - name 
1 - one 
2 - two 
3 - three 
4 - four 

,第二個表是這樣的

ID - REF 
1 - 1 
2 - 1 
3 - 2 
4 - 2 
5 - 3 
6 - 3 
7 - 4 
8 - 4 

我希望他們像這樣結合:

ID - name - count 
1 - one - 2 
2 - two - 2 
3 - three- 2 
4 - four - 2 

我曾嘗試使用子查詢,左連接,右連接,內部連接,子查詢連接,分組和9次十我得到20我應該得到1300個結果中第一個ID的結果。剩下的我只得到一個不正確的數字,沒有名字。

我覺得這是MySQL 101,但是在嘗試了多個變體並且沒有任何東西的時候,我覺得必須有一些我失蹤的東西。

我會很樂意被定向到一個問題,那就是在完全相同的狀況(2小時的尋找,並沒有什麼作品完全一樣),或者一個簡單的查詢指出這種方法的邏輯,在感謝提前給任何答案的人,你將會度過我的一天。

如果需要任何附加信息,請告訴我,我故意遺漏了這個查詢,因爲我已經調整了很多次,所以沒有太大的相關性(我將不得不列出每一個我試過的查詢,這將是遠得多滾動)

好,我已經測試過的第一和回答,似乎在這方面的工作,所以我會擴大我的回答,問題是「回答」所以這只是一個擴展,如果沒有答覆我將關閉這與答案如下:

SELECT t.id, t.name, count(*) AS suppliers 
FROM #__tiresku AS t 
LEFT JOIN #__mrsp AS m ON t.name = m.tiresku_id 
GROUP BY t.id, t.name 

的擴張是內連接,我有另一個表日at更多的是一個列表,它有一個id和一個名字,就是這樣,我用一個id引用該表來代替「name」。

這可能有更好的選擇,然後加入(如外鍵或某物)。

我這個加入到選擇b.name AS brand_name

而且聯接INNER JOIN #__brands AS b ON t.brand = b.id

Worked with a sub query rather then join

回答

5

這是一個基本採用聚集的加入:

select t1.id, t1.name, count(*) as `count` 
from table1 t1 join 
    table2 t2 
    on t1.id = t2.ref 
group by t1.id, t1.name; 
+0

我會測試它,讓你知道它是怎麼回事。如果它不起作用,我會更新這個問題來說明爲什麼這個例子不起作用。 –

+0

似乎工作,雖然我會擴大我的問題,因爲我已經找到了問題的根源。 –

0

至於問,該示例不不包括第一個表中不在第二個表中的記錄,但這可能是可能的並且是暗含的d。

我傾向於創建第二個表計數的嵌套表,而不考慮「存在於第一表」要麼,除非計數是巨大的,然後將探頭變得更便宜。

我會做值的計數在第二表首先作爲第一個表是一個描述的事實上的解碼。

select ID, name, coalesce('count',0) 

from (select ref, count(*) as 'count' 
     from table2 
     group by ref) as T2 

right join table1 

on ref = ID;  
相關問題