Mysql 盲目性

Mysql 盲目性,mysql,join,Mysql,Join,这个问题 SELECT station_id, station_name, COUNT(event_station) as `total_visit_count` FROM taps AS t JOIN event_stations AS s ON t.event_station = s.station_id WHERE s.event_id=6

这个问题

   SELECT station_id, station_name, 
        COUNT(event_station) as `total_visit_count` 
           FROM taps AS t 
           JOIN event_stations AS s 
              ON t.event_station = s.station_id 
                 WHERE s.event_id=6 
                    GROUP BY s.station_id 
                    ORDER BY s.station_id;
返回

+------------+--------------+-------------------+
| station_id | station_name | total_visit_count |
+------------+--------------+-------------------+
|          5 | Station one  |                24 |
|          6 | Station two  |                35 |
|          7 | St. Pancras  |                34 |
+------------+--------------+-------------------+
这很好

但是,在
点击
中有一些站点尚未访问,我希望它们显示的
总访问次数
为0

+------------+--------------+-------------------+
| station_id | station_name | total_visit_count |
+------------+--------------+-------------------+
|          5 | Station one  |                24 |
|          6 | Station two  |                35 |
|          7 | St. Pancras  |                34 |
|          8 | Station four |                 0 |
+------------+--------------+-------------------+
我该如何将我的查询改写成这样?我想需要某种连接,但我不太清楚:-(


[更新]

describe event_Stations;
+--------------+------------+------+-----+---------+----------------+
| Field        | Type       | Null | Key | Default | Extra          |
+--------------+------------+------+-----+---------+----------------+
| station_id   | int(11)    | NO   | PRI | NULL    | auto_increment |
| event_id     | int(11)    | NO   |     | NULL    |                |
| station_name | text       | NO   |     | NULL    |                |
| allocated    | tinyint(1) | NO   |     | 0       |                |
+--------------+------------+------+-----+---------+----------------+
4 rows in set (0.20 sec)


describe taps;

+---------------+-----------+------+-----+-------------------+-------+
| Field         | Type      | Null | Key | Default           | Extra |
+---------------+-----------+------+-----+-------------------+-------+
| tag_id        | int(11)   | NO   |     | NULL              |       |
| time_stamp    | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
| event_station | int(11)   | NO   |     | NULL              |       |
| device_id     | text      | YES  |     | NULL              |       |
| device_type   | text      | YES  |     | NULL              |       |
| event_id      | int(11)   | NO   |     | NULL              |       |
+---------------+-----------+------+-----+-------------------+-------+
6 rows in set (0.00 sec)


select * from event_stations where event_id=6;
+------------+----------+-----------------+-----------+
| station_id | event_id | station_name    | allocated |
+------------+----------+-----------------+-----------+
|          5 |        6 | Station one     |         0 |
|          6 |        6 | Station two     |         0 |
|          7 |        6 | St. Pancras     |         0 |
|          8 |        6 | Station three   |         0 |
|          9 |        6 | Station four    |         0 |
|         10 |        6 | Station five    |         0 |
|         11 |        6 | Station six     |         0 |
|         12 |        6 | Station seven   |         0 |
|         13 |        6 | Station eight   |         0 |
|         14 |        6 | Station nine    |         0 |
|         15 |        6 | Station  ten    |         0 |
|         16 |        6 | Station  eleven |         0 |
+------------+----------+-----------------+-----------+
12 rows in set (0.00 sec)

首先,交换联接的顺序,以便首先对主表进行排序(这仅用于组织目的)

然后,使用左连接来完成您要查找的内容。这将确保您提取所有
事件站
记录(连接的左部分),即使
点击
表(连接的右部分)中没有相应的记录。您将获得空值来代替缺失的点击

COUNT将忽略总计为空的记录,因此只返回非空记录的计数。因此,对于丢失的事件记录,它将返回0

SELECT
    station_id, 
    station_name, 
    COUNT(event_station) as `total_visit_count` 
FROM event_stations AS s 
   LEFT JOIN taps AS t
      ON t.event_station = s.station_id 
WHERE s.event_id = 6
GROUP BY s.station_id 
ORDER BY s.station_id;

或者,您也可以在原始加入顺序中使用右加入.

请发布表说明。我认为这是不必要的,因为所有相关字段都已命名。我认为如果我添加了表说明,问题看起来会很混乱。是否缺少任何信息?它不起作用,但现在起作用了。谢谢!