gpt4 book ai didi

mysql - SQL:如何查找只参加过一项事件的人

转载 作者:行者123 更新时间:2023-11-29 13:41:47 26 4
gpt4 key购买 nike

鉴于此架构和数据:

create table contacts (id int, name varchar(255));
create table events (id int, name varchar(255));
create table tickets (contact_id int, event_id int);

insert into contacts (id, name) values (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
insert into events (id, name) values (1, 'Event 1'), (2, 'Event 2');
insert into tickets (contact_id, event_id) values (1,1), (1,2);
insert into tickets (contact_id, event_id) values (2,2);

如何找到只参加过一项事件的人?我希望只找到只参加过一次事件的鲍勃,而不是参加过两次事件的爱丽丝,也找不到参加过零次事件的查理。

可能有数百个联系人和事件,我想查找之前未参加过任何事件的特定事件的联系人。

我在这上面画了一个空白。

编辑:让我澄清一下,

如何找到恰好参加过一项特定事件的人员?对于事件 2,我希望只找到只参加过一次事件的 Bob,而不是参加过两次事件的 Alice,也找不到参加过零次事件的 Charlie。

最佳答案

@yang 的答案适用于仅参加过一次非特定事件的用户,但是,如果您想查找参加特定的用户作为他们的第一个也是唯一一个事件,则这将有效,如果 tickets.event_id不能是NULL :

SELECT t1.contact_id
FROM tickets t1
LEFT JOIN tickets t2
ON t2.contact_id = t1.contact_id
AND t2.event_id != t1.event_id
WHERE t1.event_id = 'someid'
AND t2.event_id IS NULL;

(tickets.contact_id, tickets.event_id) 上的正确索引假设是为了性能..

关于mysql - SQL:如何查找只参加过一项事件的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977643/

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