2015-10-01 108 views
0

我有兩個表SQL連接兩個表having子句

First_id | Text Second_id | First_id | Date | Email 

我需要從具有計數第一個表中的所有記錄從第二表日期空和電子郵件空。

我有SQL:

Select * from first f join second s on f.id = s.first_id where date is null and email is null group by first_id having(count(s.id) < 10 or count(s.id) = 0) 

它運作良好,但在那裏我充滿對第二臺從第一個表ID的所有數據和電子郵件我沒有結果。

的樣本數據: 一臺

1 | one 
2 | two 

二表

1 | 1 | NULL | NULL 
1 | 1 | 2015-01-01 | NULL 
1 | 2 | 2015-01-01 | NULL 
1 | 2 | 2015-01-01 | NULL 

我期望輸出:

1 | one | 1 
2 | two | 0 

最後一列是項目的數量從第二的日期和電子郵件空值。我的查詢返回

1 | one | 1 

沒有第二排

+0

*「我需要從具有計數第一個表中的所有記錄從第二表日期空和電子郵件空」。*:我不明白。那麼你想要準確計算什麼?考慮張貼樣本輸入和輸出數據來澄清您的問題。 – sstan

回答

2

做一個左連接,也這是很好的指定要顯示的列,否則你將得到重複。

Select * from first f left join second s on f.id = s.first_id where date is null and email is null group by first_id having(count(s.id) < 10 or count(s.id) = 0) 

看看這個圖片,以瞭解如何加入工作:

http://i.stack.imgur.com/udQpD.jpg

+1

圖片+1(真棒venn圖) –

+0

沒關係,但它不顯示計數器的行數= 0 – Chris

0
SELECT t1.First_id, t2.Second_id 
FROM t1 
LEFT JOIN t2 
ON t1.First_id = t2.First_id 
INNER JOIN (
    SELECT Second_id 
    FROM t2 
    GROUP BY Second_id 
    HAVING (COUNT(*) < 10 OR COUNT(*) = 0) 
) _cc 
ON t.Second_id = _cc.Second_id 
WHERE t2.date IS NULL AND t2.email IS NULL; 

一個解決辦法是檢查HAVING限制在返回你需要休息加入ID的子查詢。

當您使用GROUP BY語句時,只選擇GROUP BY列或聚合函數,否則可能會產生不可預測的結果。

https://dev.mysql.com/doc/refman/5.1/en/group-by-handling.html

T-SQL GROUP BY: Best way to include other grouped columns