选择第1列中具有非不同值的行,作为第2列的范围

时间:2015-05-30 16:22:19

标签: sql performance postgresql

所以我有一个人员表和bank_accounts表:

People
id | name
1    John
2    Mark
3    Mary

BankAccount
id | person_id | currency
1      1          'USD'
2      1          'EUR'
3      2          'USD'
4      2          'USD'
5      3          'EUR'

如果该所有者只拥有最多一种货币的帐户,我想与其所有者取回所有帐户。我不想取回任何帐户,该帐户由另一种货币的另一个帐户的用户拥有。嗯:P

所以我想要回来的表看起来像那样:

account_id | person_id | currency

3            2(Mark)     'USD'
4            2(Mark)     'USD'
5            3(Mary)     'EUR'

希望它是可以理解的。这当然是简化的例子。我会在包含大量数据的更大的表上使用它。所以一些效率也会很好。

非常感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:0)

select * 
from bankAccount
where person_id in
(
  select person_id
  from bankAccount
  group by person_id
  having count(distinct currency) = 1
)