以多对多关系查询多个条件的所有用户?

问题描述 投票:0回答:1

我有以下表结构:

user:      user_id|user_name
           1      |John Doe
           2      |Alex

data:      data_id|data_kind|data_value
           1      |123      |Hello
           2      |456      |World
           3      |123      |GoodBye
UNIQUE(data_kind, data_value)

user_data: user_id|data_id
           1      |1
           1      |2
           2      |3
           2      |2
UNIQUE(user_id, data_id)
INDEX(data_id)

我如何能够查询具有 (data_kind=123,data_value='Hello') 和 (data_kind=456,data_value='World') 的所有用户(John Doe)?

sql postgresql
1个回答
0
投票

即使

data
表中存在唯一约束,多对多 关系表
user_data
不会阻止与同一用户相关的多行数据。

为了防止潜在的重复数据,查询可以采用以下形式:

select *
from user u
where exists (
  select 1 from user_data ud
  join data d on d.data_id = ud.data_id
  where ud.user_id = u.user_id
    and d.data_kind = 123 and d.data_value = 'Hello'
) and exists (
  select 1 from user_data ud
  join data d on d.data_id = ud.data_id
  where ud.user_id = u.user_id
    and data_kind = 456 and data_value = 'World'
)
© www.soinside.com 2019 - 2024. All rights reserved.