SQL从三个表中选择至少两个不同的值连接在一起

标签 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行是只有一个工作地点的用户。

我做错了什么?

最好的答案是有一个用户列表,最后一列显示他们在哪个机构工作...

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

最佳答案

使用正确的连接方法并在 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/

相关文章:

php - 在按列表排序的表中移动记录的最佳方法

postgresql - SQL、Postgres OID 是动态的还是静态的

mysql - SQL中的SHOW语句吗?

python - 在 python 中使用公差唯一化数组/列表(相当于 uniquetol)

R:如何根据另一个变量中的值选择 dplyr::distinct() 保留哪一行?

mysql - 获取剩余的行

MySQL 左连接单字段

mysql - 使用 SELECT 和连接 MySQL?

python - 使用 Python 根据上次选择的列中提供的整数选择 Postgresql 数据库中的动态行

unique - 如何防御多账户用户?