2013-02-25 37 views
0

我有一個諮詢即時試圖實現一個問題:如何顯示來自一個表中的所有記錄,即使它們不匹配WHERE子句與JOIN

SELECT [columns] FROM table1 LEFT/RIGHT JOIN table2 ON table1.id_user = table2.id [WHERE clause] GROUP BY column 

什麼,我想這個協商的一個例子做如下圖所示:

具有table1的這個記錄:

ID | id_user |用戶|值

1 | 1 | name1 | 10

2 | 1 | name1 | 10

3 | 1 | name1 | 11

4 | 1 | name1 | 10

5 | 2 | name2 | 11

6 | 2 | name2 | 11對

這那些在表2:

ID |用戶

1 | name1

2 | NAME2

我想獲得給定的值,每個用戶有多少條記錄存在,exmample如果我們尋找價值10我想獲得:

名1 | 3

name2 | 0

我帶左右試圖加入,但沒有工作,我剛剛得到這個因爲是匹配的唯一記錄WHERE子句我猜:

名1 | 3

而不是名稱2的結果。

我一直在尋找失敗在這裏把我的問題之前解決,希望有人能幫助我這個問題:)

對不起,我英文不好。 我真的很感激任何幫助,您可以提供

+0

表1中的id_user值與表2中的id列不匹配爲什麼name2的id_user是1而不是2? – 2013-02-25 23:35:42

+0

對不起,這是我的壞,只是修復它 – 2013-02-25 23:36:58

回答

0

不是最有效的查詢但這應該工作

select user, (select count(*) from table1 b where b.id_user=a.id and b.value=10) 
from table2 a 

的時候,因爲這個查詢是如此低效,我將加入客戶端上的結果,而不是試圖在SQL中執行它。這個過程會像這樣。

  1. SELECT * FROM從表1表2
  2. 選擇id_user,COUNT(*)其中,值= 10
  3. 迭代通過查詢#1和存儲在一個對象中的結果可能看起來像
  4. 迭代通過查詢#2並更新來自步驟#3的對象。

它總是依賴於結果集的大小和可能涉及的硬件,但通常情況下這樣做速度更快,儘管在代碼中編寫起來要複雜得多。

+0

剛剛嘗試過這種解決方案,它的工作原理,因爲我想。謝謝!我也嘗試在客戶端進行連接 – 2013-02-26 00:47:05

0

試試這個。

SELECT t2.user,SUM(CASE WHEN t2.id=t1.id_user THEN 1 ELSE 0 END) AS TotalRecords 
FROM table2 t2 
LEFT JOIN table1 t1 ON t2.id =t1.id_user 
GROUP BY t2.id 
HAVING t1.value=10 
+0

嘗試了這個,但給了我相同的結果,只是name1的記錄,我的實際查詢是這樣的: SELECT t2.queue AS「Queue」,SUM(CASE WHEN t2。 id = t1.id_queue THEN 1 ELSE 0 END)AS TotalRecords FROM隊列t2 LEFT JOIN調用t1 ON t2.id = t1.id_queue WHERE t1.datetime_end BETWEEN'2013-02-21 00:00:00'AND' 2013-02-21 23:59:59' GROUP BY t2.queue – 2013-02-26 00:15:22

+0

沒有意識到你只需要那些值= 10。編輯。 – 2013-02-26 00:26:36

相關問題