2011-04-26 23 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