![](/img/trans.png)
[英]How can I count records in multiple tables having same column for where clause is pgsql
[英]How can I specify the where clause when combining multiple tables?
我有一个查询,应该计算所有指定的行。 这是我的查询:
SELECT COUNT(*) AS Som
FROM users
RIGHT JOIN stoftesten ON users.username = stoftesten.gebruikersid
RIGHT JOIN eindgesprekken ON users.username = eindgesprekken.gebruikersid
RIGHT JOIN rapportages ON users.username = rapportages.gebruikersid
WHERE users.rol = 'geleider' and users.basis = '1' and stoftesten.status = 'Niet beoordeeld' or eindgesprekken.status = 'Niet beoordeeld' or rapportages.status = 'Niet beoordeeld';
我应该得到数字2,因为那是我根据想要的查询所拥有的记录数,但是它给了我40。在这里我做错了什么?
表格:
使用者
-------------------------------------------
| username (PK) | basis | rol | name |
-------------------------------------------
| user01 | VLB | geleider | Ben |
| user02 | GER | geleider | Tom |
-------------------------------------------
斯托芬
-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1 | user01 | Niet beoordeeld |
| 2 | user01 | Beoordeeld |
-------------------------------------------
和睦
-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1 | user01 | Beoordeeld |
| 2 | user01 | Beoordeeld |
-------------------------------------------
结识
-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1 | user01 | Niet beoordeeld |
| 2 | user01 | Beoordeeld |
-------------------------------------------
我希望查询从状态为“ Niet beoordeeld”且用户基础为“ VLB”的“ stoftesten”,“ eindgesprekken”和“ rapportages”中选择记录。 然后我要计算这些行并得到一个数字。 在这种情况下,我想看到数字2。
我怀疑您要计算满足任何这些条件的用户。 如果是这样,我建议使用EXISTS
而不是join:
SELECT COUNT(*) AS Som
FROM users u
WHERE u.rol = 'geleider' and u.basis = '1' AND
(EXISTS (SELECT 1
FROM stoftesten s
WHERE s.gebruikersids = u.username AND
s.status = 'Niet beoordeeld'
) OR
EXISTS (SELECT 1
FROM eindgesprekken e
WHERE e.gebruikersids = u.username AND
e.status = 'Niet beoordeeld'
) OR
EXISTS (SELECT 1
FROM rapportages r
WHERE r.gebruikersids = u.username AND
r.status = 'Niet beoordeeld'
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.