根据匹配仅选择一行

时间:2014-12-05 16:38:50

标签: sql postgresql

我在postgresql db中有两个表如下: users_orgs

user_id,org_id
112,223
113,224
112,225

单位

id,name
223,Apple Ltd. 
224,Banana Ltd.
225,Cherry Ltd.

我正在尝试生成如下所示的输出:

user_id,org_id,name
112,223,Apple Ltd.
113,224,Banana Ltd.

我只想匹配一个组织,无论user_id出现在orgs_users表中的次数如何。我对哪一个(min,max,等等)无动于衷。

下面的查询采用user_ids列表来查询这两个表并生成列表,但是我得到了重复项,所以出了点问题。

select min(users_orgs.org_id), users_orgs.user_id, orgs.name from users_orgs 
left join orgs on users_orgs.org_id=orgs.id where orgs_users.user_id in (112,113)
group by users_orgs.division_id, users_orgs.user_id, orgs.name

1 个答案:

答案 0 :(得分:1)

select uo.user_id, uo.org_id, o.name 
from (select user_id, min(org_id) org_id
      from users_orgs where user_id in (112,113)
      group by user_id) uo
     left join orgs o on uo.org_id = o.id;

(分组后加入ORGS)