postgresql 带有多对多额外表的SQL SELECT语句

fykwrbwg  于 2023-01-13  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我有一个链接用户的表。请考虑以下内容:

**Table contracts:**
   contract_id int,
   contract_number varchar,
   user_id int

**Table users:**
   user_id int

**Table user_links**
   user_id int,
   linked_user_id int

user_links表对于特定的user_id可以有0行,假定用户没有链接的用户,因此select语句可以返回一行或NULL。
如果user_links表中没有行,则left join user_links ul on ul.user_id = contracts.user_id OR ul.linked_user_id = contracts.user_id的方法似乎不起作用。
如果只有intuser_id,我如何从合同表中同时获得user_idlinked_user_id的行?例如,如果user_id 1有linked_user_id 2,我需要两个用户的合同行;但是,如果用户在user_links表中没有行,我仍然需要获取他们的合同。

np8igboo

np8igboo1#

假设您的输入user_id是变量@user_id,那么下面的查询将获得该用户的所有合同,如果有链接的用户的话。

SELECT * from contracts c
where c.user_id = @user_id
OR c.user_id IN ( SELECT linked_user_id from user_links ul 
             WHERE ul.user_id = @user_id)

相关问题