2011-04-26 19 views
2

我有一個用戶表,其中一些用戶有與之相關的文章,其中一些有type = writer。我想顯示所有有文章或有type = writer的用戶。所以,所有的作家都應該被顯示,而其他用戶類型只有在他們有文章的情況下才會被顯示。mysql其中OR有

這是我的查詢到目前爲止,這留下了沒有文章的作家。

SELECT u.name, u.type, COUNT(a.id) count 
FROM users u 
LEFT JOIN articles a on u.id = a.writer_id 
GROUP BY u.name 
HAVING count > 0 

添加以下WHERE子句顯然會排除其他具有文章的用戶類型。

WHERE u.type = 'writer' 

我需要做的這兩個結果集UNION?

回答

4

我認爲你正在尋找這樣的事情

SELECT 
    u.name, 
    u.type, 
    COUNT(a.id) count 
FROM users u 
LEFT JOIN articles a ON u.id = a.writer_id 
WHERE 
    u.type='writer' --all users that are writers 
    OR 
    a.writer_id IS NOT NULL --all users that have at least one article 
GROUP BY 
    u.name 
--removed the having clause as it seems it may be possible that a writer has no articles. 
2

只要改變WHERE子句允許具有匹配的文章記錄任何用戶:

SELECT u.name, u.type, COUNT(a.id) count 
FROM users u 
LEFT JOIN articles a on u.id = a.writer_id 
WHERE u.type = 'writer' OR a.writer_id IS NOT NULL 
GROUP BY u.name 
HAVING count > 0