我有一张有两个外键的桌子:

exp_fk bd_fk (nullable)
exp_id1 bd_id1
exp_id2 bd_id2
exp_id1 bd_id2
exp_id2 bd_id2

此表没有唯一性约束.

我希望能够查询有多少个exp_id具有超过1个bd_fk.因此,在上表中,我应该返回计数1,因为exp_id1具有两个唯一的bd_id(bd_id1、bd_id2),而不是具有相同bd_fk的exp_id2.

我试过:

select exp_fk, bd_fk, count(*) from table
where bd_fk is not null 
group by exp_fk, bd_fk 
having count(*) > 1;

问题是,HAVING不是在寻找唯一的BD_FK.

推荐答案

使用子查询查找相关的exp_fk个值,并对这些值进行计数:

SELECT COUNT(*)
FROM (
  -- This subquery selects all the exp_fk values that have more than one unique bd_fk.
  SELECT exp_fk
  FROM table
  GROUP BY exp_fk
  HAVING COUNT(DISTINCT bd_fk) > 1
) AS subquery

Sql相关问答推荐

按postquist中的日期查询json列

Microsoft Access UNION将长文本字段限制为255个字符

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

一个SQL查询将在需要的地方多次返回同一成员

如何在postgres函数中插入后返回布尔值?

SQL:计算与另一列中给定值互斥的匹配项

以一致的价值获得独特的价值

按属性值 Select 数组元素Postgres Jsonb

如何用HeidiSQL在Firebird中设置超时?

在WHERE EXISTS子查询中,列返回是否重要?

Postgres jsonpath运算符的变量替换,如_regex?

使用多个WITH子查询的替代方法

如何使用SQL生成数据的滚动3天总和

如何在T-SQL中编写row_number的WHERE子句?

从重复值中获取最新值

SQL根据另一列的顺序和值获取组中的最后一列

列(值不为空)到其他有序列

清理 XML 数据

将有效数字作为 varchar 返回的 SQL 函数

PostgresQL-根据另一列找到 3 个最低值