我被一个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/

10-11 22:10
查看更多