我需要一些帮助。
我的任务是找到在两个或更多不同机构工作并且是文档作者的唯一用户。任何用户都可以在同一机构多次工作。
我试过这个查询,它似乎有效,但没有返回我预期的结果
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行是只有一个工作地点的用户。
我做错了什么?
最好的答案是有一个用户列表,最后一列显示他们在哪个机构工作...
或者更简单的解决方案是显示仅因机构不同而重复的用户。
最佳答案
使用正确的连接方法并在 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
关于SQL从三个表中选择至少两个不同的值连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225240/