mysql - 使用 MySQL 3 个表中的数据查找总行数

标签 mysql sql select join distinct

我正在尝试返回一个数字,但我认为查询需要覆盖 3 个表! 这是 3 个表格的简单示例(删除了几列)

table: opencall
---------------------------------
Users name | Site  | Phone      |
---------------------------------
John Smith | Leeds | 0113 1234567

table: userdb
-------------------------------------
emailAd         | site  | company   |
-------------------------------------
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="532620362113373c3e323a3d7d303c3e" rel="noreferrer noopener nofollow">[email protected]</a> | Leeds | Yorks Post

table: company
----------------------------
pk_company_id  | division_name |
----------------------------
Yorks Post     | NORTH

现在,我想做的是找到 opencall 中“division_name”为“NORTH”的总行数,我尝试了一些查询,但它们总是返回一个太大的数字。

这是我尝试过的示例:

SELECT count(*) FROM opencall, company, userdb WHERE userdb.site = opencall.site AND userdb.company = company.pk_company_id AND opencall.logdatex BETWEEN 1385041200 and 1388041200 AND opencall.condition NOT IN (8,9,11,12,19) AND company.division_name = 'NORTH`'

但是,这会返回超过 8,000 的结果,就好像我刚刚输入:

SELECT count(*) FROM opencall where logdatex BETWEEN 1385041200 and 1388041200 AND condition NOT IN (8,9,11,12,19)

这将返回 128,因此我在限制 Division_name 时所追求的数字应该在 20 左右。任何有关此问题的帮助将不胜感激。

最佳答案

试试这个:

SELECT COUNT(DISTINCT oc.UsersName)
FROM opencall oc 
INNER JOIN userdb u ON oc.site = u.site
INNER JOIN company c ON u.company = c.pk_company_id
WHERE c.division_name = 'NORTH'AND oc.logdatex BETWEEN 1385041200 AND 1388041200 AND 
      oc.condition NOT IN (8,9,11,12,19)

关于mysql - 使用 MySQL 3 个表中的数据查找总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810100/

相关文章:

mysql - 如何在 SQL 中表示浮点值

php - MYSQL 查询选择具有相同列和分组依据

sql - 按 ID 分组,只为每个选择最新的记录

mysql - SQL查询改进(表中的额外列)

MySQL Join 三个表返回多个结果

jquery - 自定义选择-溢出隐藏问题

sql - 如何在 zend 框架中使用子查询执行查询

php - 根据类别循环结果,但仅显示类别一次

sql - Linq-to-sql 一对多(最大)

sql - sqlite选择错误的查询计划