我似乎无法找出构建此查询的正确方法,而且我知道有一种方法可以使用纯 SQL 来完成,我宁愿通过正确的查询来完成,而不是在我的应用程序逻辑中。
我有三张桌子:
event_types、booking_types 和预订
我想要的是获得给定事件的预订数,但也包括零预订的事件类型的行。
SELECT et.name AS test_type, COUNT(et.name) AS num_seats FROM event_types AS et
LEFT OUTER JOIN booking_types AS bt ON et.type_id = bt.event_type_id
LEFT OUTER JOIN bookings AS b ON b.booking_id = bt.booking_id
WHERE b.event_id = 5
GROUP BY test_type
此查询返回类似
test_type | num_seats
----------------------
Transcript | 4
----------------------
Written | 1
----------------------
目前有三种 event_types:'Transcript'、'Written' 和 'Skill'
由于还没有任何“技能”预订(一个预订可以有多种类型),我希望结果包括像“技能”这样的行 | 0. 此外,如果没有预订,它应该有 3 个零行,在这种情况下,每个 event_type 一个。
感谢您提供任何帮助!