【问题标题】:How can I specify the where clause when combining multiple tables?组合多个表时如何指定 where 子句?
【发布时间】:2019-01-15 09:20:43
【问题描述】:

我有一个查询应该计算我所有指定的行。这是我的查询:

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  |
-------------------------------------------

stoftesten

-------------------------------------------
| 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         |
-------------------------------------------

eindgesprekken

-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1       | user01   | Niet beoordeeld    |
| 2       | user01   | Beoordeeld         |
-------------------------------------------

我希望查询从“stoftesten”、“eindgesprekken”和“rapportages”中选择状态为“Niet beoordeeld”且用户基础为“VLB”的记录。然后我想计算这些行并得到一个数字。在这种情况下,我想查看数字 2。

【问题讨论】:

  • 分享样本数据及其输出
  • 也许你应该为你的and / or 组合使用括号。see here for examples of precedence
  • 您能否从该样本数据中展示您的预期结果,以及如何获得该结果的逻辑?
  • 这并没有改变结果
  • 我刚刚将它添加到问题中

标签: php sql pdo


【解决方案1】:

我怀疑您想要统计满足任何这些条件的用户。如果是这样,我推荐EXISTS 而不是加入:

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'
              )
      );

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多