繁体   English   中英

合并多个表时如何指定where子句?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM