我目前正在尝试使用左连接加入两个表:
- 门户网站 -
- id_portal(索引)
- id_venue
- name_portal
- 使用权 -
- id_access(索引)
- id_event
- id_portal
- id_tickets
- 扫描访问
'access' 包含每个活动的每个门户的多种票证类型。我需要将这些组合起来以获得每个门户的 scan_access 列的总和,但包括具有“null”scan_access 的门户以得出“0”。为了实现这一点,我使用了左连接:
SELECT portal.name_portal, SUM(access.scan_access) AS total_scan
FROM portal LEFT JOIN access ON portal.id_portal = access.id_portal
WHERE portal.id_venue = $venueId
GROUP BY portal.id_portal
ORDER BY portal.id_portal ASC
这意味着我得到以下信息:
- 传送门 1 - 空
- 传送门 2 - 40
- 传送门 3 - 33
- 传送门 4 - 空
但是当我在考虑事件(id_event)时还需要获得上述结果时,我遇到了一个问题,因为当我使用以下内容时:
SELECT portal.name_portal, SUM(access.scan_access) AS total_scan
FROM portal LEFT JOIN access ON portal.id_portal = access.id_portal
WHERE portal.id_venue = $venueId AND access.id_event = 20
GROUP BY portal.id_portal
ORDER BY portal.id_portal ASC
我得到:
- 传送门 2 - 40
- 传送门 3 - 33
这是有道理的,因为它们是仅有的两行具有 id_event 值。但是我怎样才能在不丢失其他门户的情况下考虑这个 col 呢?另外,sql中是否有办法在返回结果时使“null”为零?(我可以用 php 修复 null 但想看看是否可能)