我有一个包含两个表的数据库,events
和tickets
。 events
表包含多行事件,每张售出的tickets
个票证。
例如,
events
------
id name capacity
1 Test 10
2 Test2 20
3 Test3 15
tickets
-------
id event_id customer_id
1 1 (value here doesn't matter)
2 1
3 3
4 1
5 3
所以我可以看到已经售出了3张活动#1的门票,0张活动#2门票和2张活动#3门票。
我正在尝试创建一个选择所有事件的查询,以及一个列available
,这是事件容量减去售出的票数。
我有这个问题:
SELECT
events.id,
events.name,
events.capacity,
events.capacity - COUNT(tickets.id) AS available
FROM
events
INNER JOIN tickets ON events.id = tickets.event_id
但是,这并不会返回任何尚未售出门票的事件。我认为它可能是联接的类型,但我尝试了各种没有成功的。
我不确定我哪里出错了。
答案 0 :(得分:2)
你几乎就在那里,只需将inner join
更改为left join
:
SELECT events.id,
, events.name
, events.capacity
, events.capacity - COUNT(tickets.id) AS available
FROM events
LEFT JOIN
tickets
ON events.id = tickets.event_id
group by
events.id,
, events.name
, events.capacity
即使MySQL不需要它,最好在group by
子句中明确列出所有非聚合列。
答案 1 :(得分:0)
应该是加入。尝试左连接而不是内连接