gpt4 book ai didi

mysql - 如果只有一个匹配,则返回连接表中的所有相关行

转载 作者:行者123 更新时间:2023-11-29 09:38:07 27 4
gpt4 key购买 nike

假设我有一个名为events的表

event_id | event_name | event_time
---------|------------|-----------
1 | Holiday | 09:00
2 | Meeting | 10:00

然后我有一个名为attendees的表

attendee_id | event_id | person_id
------------|----------|----------
1 | 1 | 19
2 | 1 | 28
3 | 1 | 89
4 | 1 | 100
5 | 2 | 7
6 | 2 | 19
7 | 2 | 22
8 | 2 | 28

奇怪的是,如果我只有一个人匹配,我需要返回事件及其所有参与者。如果没有匹配项,我根本不希望返回该事件。

SELECT events.*, GROUP_CONCAT(attendee_id, event_id, person_id SEPARATOR ',') AS attendees
FROM events
LEFT JOIN attendees ON events.event_id = attendees.event_id
WHERE attendees.person_id IN (89)
GROUP BY event_id

当前,这会返回“与会者”列中只有一位与会者的事件。

我知道这似乎违反直觉,但有没有一种方法可以实际返回事件以及事件中包含的所有与会者,而无需进一步进行下游过滤?

预期结果

event_id | event_name | event_time | attendees
-------- | ---------- | ---------- | ---------
1 | Holiday | 09:00 | 19,28,89,100

最佳答案

我认为您需要更改 WHERE 子句:

WHERE attendees.event_id IN (SELECT event_id FROM attendees WHERE person_id = 19)

所以使用这个:

SELECT 
e.event_id,
GROUP_CONCAT(a.person_id SEPARATOR ',') AS attendees
FROM events e LEFT JOIN attendees a
ON e.event_id = a.event_id
WHERE a.event_id IN (SELECT event_id FROM attendees WHERE person_id = 19)
GROUP BY e.event_id

请参阅demo .
结果:

| event_id | attendees    |
| -------- | ------------ |
| 1 | 28,89,100,19 |
| 2 | 7,19,22,28 |

关于mysql - 如果只有一个匹配,则返回连接表中的所有相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com