SQL从连接到

时间:2015-08-26 11:20:14

标签: sql postgresql unique

我需要一些帮助。

我的任务是找到独特的用户,他们中的哪些人在两个或更多不同的机构工作,并且是文档的作者。任何用户都可以在同一个机构工作几次。

我尝试了这个查询,它似乎正在工作,但没有返回我的预期

SELECT 
    usr_users.id,
    usr_users.first_name, 
    usr_users.last_name, 
    usr_users.code,
    cls_institutions.short_name
FROM 
    elaba.usr_users, 
    elaba.usr_user_occupations, 
    elaba.cls_institutions, 
    elaba.doc_documents, 
    elaba.doc_document_authors
WHERE 
    usr_user_occupations.user_id = usr_users.id AND
    cls_institutions.id = usr_user_occupations.institution_id AND
    doc_documents.id = doc_document_authors.document_id AND
    doc_document_authors.user_id = usr_users.id
GROUP BY 
    usr_users.id, cls_institutions.short_name
HAVING
    COUNT(cls_institutions.short_name) > 2

此查询还返回在一个机构中工作的用户,结果是:

1:  52150;"Thomas";"Johnes";"University"
2:  52150;"Thomas";"Johnes";"College"
3:  52182;"Aligi";"Miqit";"University"
4:  52182;"Aligi";"Miqit";"College"
5:  52182;"Aligi";"Miqit";"ConstructionCo"
6:  52191;"Chris";"Steven";"University"
7:  52219;"Ally";"Jones";"University"
8:  52238;"Elly";"Gee";"University"
9:  52238;"Elly";"Gee";"ConstructionCo"
10: 52254;"Luigi";"Vasili";"ConstructionCo"
11: 52254;"Luigi";"Vasili";"University"

在6行和7行中,只有一个工作场所的用户。

我做错了什么?

答案的最佳方法是让用户列表显示最后一列显示他们在哪个机构工作......

或者更简单的解决方案是显示仅由机构不同的重复用户。

1 个答案:

答案 0 :(得分:1)

使用正确的连接方法并计入having子句。

SELECT u.id, u.first_name, u.last_name, u.code, i.short_name
FROM elaba.usr_users u
INNER JOIN elaba.usr_user_occupations uo ON u.id = uo.user_id 
INNER JOIN elaba.cls_institutions i ON uo.institution_id = i.id
INNER JOIN elaba.doc_document_authors da ON u.id = da.user_id 
INNER JOIN elaba.doc_documents d ON da.document_id = d.id
GROUP BY u.id, i.short_name
HAVING COUNT(*) >= 2