我被一个SQL查询困住了,希望你们能帮我。
我有两张桌子:
EVENTS
event_id (PK)
event_name
ORDERS
order_id (PK)
event_id (FK)
我正试图对这些表执行以下查询:
SELECT
e.event_id,
e.name,
COUNT(o.event_id) AS booked
FROM
events AS e
INNER JOIN
orders AS o
ON
e.event_id = o.event_id
WHERE
e.event_id IN (1, 2, 3)
问题是我得到的结果是:
+----------+------+--------+
| event_id | name | booked |
+----------+------+--------+
| NULL | NULL | 0 |
+----------+------+--------+
但当我使用以下命令运行3个单独的查询时:
WHERE e.event_id IN (1)
WHERE e.event_id IN (2)
WHERE e.event_id IN (3)
我得到了我想要的结果:
+----------+-------+--------+
| event_id | name | booked |
+----------+-------+--------+
| 1 | Test1 | 0 |
+----------+-------+--------+
+----------+-------+--------+
| event_id | name | booked |
+----------+-------+--------+
| 2 | Test2 | 0 |
+----------+-------+--------+
+----------+-------+--------+
| event_id | name | booked |
+----------+-------+--------+
| 3 | Test3 | 0 |
+----------+-------+--------+
我做错什么了?是否有方法只使用一个查询并获取:
+----------+-------+--------+
| event_id | name | booked |
+----------+-------+--------+
| 1 | Test1 | 0 |
+----------+-------+--------+
| 2 | Test2 | 0 |
+----------+-------+--------+
| 3 | Test3 | 0 |
+----------+-------+--------+
请帮忙。
更新:
当我跑步时:
SELECT
e.event_id,
e.name,
COUNT(o.event_id) AS booked
FROM
events AS e
LEFT JOIN
orders AS o
ON
e.event_id = o.event_id
WHERE
e.event_id IN (1, 2, 3)
我只得到:
+----------+-------+--------+
| event_id | name | booked |
+----------+-------+--------+
| 1 | Test1 | 0 |
+----------+-------+--------+
最佳答案
您应该使用LEFT JOIN
而不是INNER JOIN
,并且不要忘记使用GROUP BY
子句,因为您使用的是聚合函数COUNT()
。
SELECT e.event_id,
e.name,
COUNT(o.event_id) AS booked
FROM events AS e
LEFT JOIN orders AS o
ON e.event_id = o.event_id
WHERE e.event_id IN (1, 2, 3)
GROUP BY e.event_id, e.name
SQLFiddle Demo
若要进一步了解有关联接的更多信息,请访问以下链接:
Visual Representation of SQL Joins
关于mysql - 使用COUNT()在2个表之间执行INNER JOIN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15183377/