mysql - Joins中的疑惑——MySQL

标签 mysql join outer-join

我有一个问题,

SELECT E.staffid AS staff
SUM(E.Frequency='Less') AS lessCount, 
SUM(E.Frequency='More') AS moreCount,  
FROM effort_frequency E 
INNER JOIN ost_staff S ON S.staff_id = E.staffid 
WHERE E.log_date BETWEEN '2012-05-01' AND '2012-05-23' 
GROUP BY E.staffid

我得到下表,

+-------+-----------+-----------+
| Staff | lessCount | moreCount |
+-------+-----------+-----------+
|  1    |    2      |     3     |
|  3    |    1      |     4     |
|  5    |    2      |     3     |
+-------+-----------+-----------+

您可以看到结果中缺少 2 和 4,在给定日期的 effort_frequency 表中将没有 staff_id 为 2 和 4 的行,但我正在尝试加入 ost_staff 表,这样我就可以获得类似下表的内容,ost_staff 将包含所有员工 ID,比方说 1-5。

+-------+-----------+-----------+
| Staff | lessCount | moreCount |
+-------+-----------+-----------+
|  1    |    2      |     3     |
|  2    |    0      |     0     |
|  3    |    1      |     4     |
|  4    |    0      |     0     |
|  5    |    2      |     3     |
+-------+-----------+-----------+

我尝试了外部连接但它不起作用,我想我在某个地方犯了错误。

最佳答案

WHERE 子句移动到ON 子句,并将INNER JOIN 更改为RIGHT JOIN。并将 GROUP BY E.staffid 更改为 GROUP BY S.staff_id;同样 SELECT E.staffid, 将其更改为 SELECT s.staff_id:

SELECT S.staff_id AS staff

    COALESCE(SUM(E.Frequency='Less'),0) AS lessCount, 
    COALESCE(SUM(E.Frequency='More'),0) AS moreCount,  

FROM effort_frequency E 

RIGHT JOIN ost_staff S 
ON S.staff_id = E.staffid 
AND E.log_date BETWEEN '2012-05-01' AND '2012-05-23' 

GROUP BY S.staff_id

如果要使用LEFT JOIN,请切换表 ost_staff 和 effort_frequency:

SELECT S.staff_id AS staff

    COALESCE(SUM(E.Frequency='Less'),0) AS lessCount, 
    COALESCE(SUM(E.Frequency='More'),0) AS moreCount,  

FROM ost_staff S 

LEFT JOIN effort_frequency E 
ON S.staff_id = E.staffid 
AND E.log_date BETWEEN '2012-05-01' AND '2012-05-23' 

GROUP BY s.staff_id

您也可以使用 IFNULL 代替 COALESCE。尽管 IFNULL 仅适用于 MySQL

关于mysql - Joins中的疑惑——MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713816/

相关文章:

mysql - 如果 ID 列是主键,我需要在 mySQL 表上添加索引吗?

mysql - 简单的 MySQL 连接不起作用

mysql - 如何使用字符串和整数值选择最大值

mysql - 带计数的 SQL 语句

php - WordPress基于MySQL中join 2表的更新语句

MYSQL JOIN同表,合并空字段求和

sql - SQL 中外连接的目的(或用例)是什么?

php - 如何从自动完成中获取单击的输入单选值以将表单发送到 php 文件

mysql - 进行 LEFT JOIN 时,当第二个表中不存在匹配值时,匹配值将从结果中丢失

php - JOIN 3 个表中的行 WHERE table.column1 = tableS.column1 = tableT.column1