第二个表的MySQL限制

第二个表的MySQL限制,mysql,join,limit,Mysql,Join,Limit,我有一个数据库,里面有运行这些事件的事件和组织。我希望创建一个查询,显示90天或更长时间内没有创建事件的任何组织 到目前为止,我有一个疑问: SELECT organizations.name, organizations.first_name, organizations.last_name, organizations.email, events.created_at, events.start_date, events.end_date FROM events INNER JOIN or

我有一个数据库,里面有运行这些事件的事件和组织。我希望创建一个查询,显示90天或更长时间内没有创建事件的任何组织

到目前为止,我有一个疑问:

SELECT organizations.name, organizations.first_name, organizations.last_name, 
organizations.email, events.created_at, events.start_date, events.end_date
FROM events
INNER JOIN organizations ON events.organizer_id = organizations.id
WHERE DATE_SUB(CURDATE(),INTERVAL 90 DAY) > events.created_at
GROUP BY events.organizer_id
ORDER BY events.created_at DESC
问题是,这只会选择任何超过90天的活动,而不是最新的活动。如何让查询查看最新创建的事件,并查看该事件是否为90天或更久,并且仅包含该事件?

尝试以下操作:

首先创建一个查询,在这里调用它,选择在过去90天内创建事件的所有组织

SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at
这使得:

SELECT * from organizations where id not in (SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at)
这是因为SQL是正交的,也就是说,您可以将查询嵌入到其他查询中。

尝试以下方法:

首先创建一个查询,在这里调用它,选择在过去90天内创建事件的所有组织

SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at
这使得:

SELECT * from organizations where id not in (SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at)
这是因为SQL是正交的,也就是说,您可以将查询嵌入到其他查询中。

尝试以下方法:

首先创建一个查询,在这里调用它,选择在过去90天内创建事件的所有组织

SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at
这使得:

SELECT * from organizations where id not in (SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at)
这是因为SQL是正交的,也就是说,您可以将查询嵌入到其他查询中。

尝试以下方法:

首先创建一个查询,在这里调用它,选择在过去90天内创建事件的所有组织

SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at
这使得:

SELECT * from organizations where id not in (SELECT organizer_id from events where DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= events.created_at)

这是因为SQL是正交的,也就是说,您可以将查询嵌入到其他查询中。

您可以使用聚合。如果您关心组织,则不需要在“选择:

此查询不会选择从未发生过事件的组织。要做到这一点,您需要一个左外连接。这里有一个方法:

SELECT o.name, o.first_name, o.last_name, o.email
FROM organizations o LEFT JOIN
     events e
     ON e.organizer_id = o.id AND
        e.created_at >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
WHERE e.organizer_id is null
GROUP BY o.id
ORDER BY MAX(e.created_at) DESC;

注意,我还将查询更改为使用表别名。这使得查询更易于编写和读取。

您可以使用聚合。如果您关心组织,则不需要在“选择:

此查询不会选择从未发生过事件的组织。要做到这一点,您需要一个左外连接。这里有一个方法:

SELECT o.name, o.first_name, o.last_name, o.email
FROM organizations o LEFT JOIN
     events e
     ON e.organizer_id = o.id AND
        e.created_at >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
WHERE e.organizer_id is null
GROUP BY o.id
ORDER BY MAX(e.created_at) DESC;

注意,我还将查询更改为使用表别名。这使得查询更易于编写和读取。

您可以使用聚合。如果您关心组织,则不需要在“选择:

此查询不会选择从未发生过事件的组织。要做到这一点,您需要一个左外连接。这里有一个方法:

SELECT o.name, o.first_name, o.last_name, o.email
FROM organizations o LEFT JOIN
     events e
     ON e.organizer_id = o.id AND
        e.created_at >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
WHERE e.organizer_id is null
GROUP BY o.id
ORDER BY MAX(e.created_at) DESC;

注意,我还将查询更改为使用表别名。这使得查询更易于编写和读取。

您可以使用聚合。如果您关心组织,则不需要在“选择:

此查询不会选择从未发生过事件的组织。要做到这一点,您需要一个左外连接。这里有一个方法:

SELECT o.name, o.first_name, o.last_name, o.email
FROM organizations o LEFT JOIN
     events e
     ON e.organizer_id = o.id AND
        e.created_at >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
WHERE e.organizer_id is null
GROUP BY o.id
ORDER BY MAX(e.created_at) DESC;

注意,我还将查询更改为使用表别名。这使查询更易于编写和阅读。

因为您正在查找组织,所以您的查询应该选择“来自组织”而不是“来自事件”,并且应该使用左联接而不是“内部联接”,以便显示根本没有发布任何事件的组织。因为您正在查找组织,然后,您的查询应该从组织而不是从事件中选择,并且应该使用左联接而不是内部联接来显示根本没有发布任何事件的组织。由于您正在查找组织,因此您的查询应该从组织而不是从事件中选择,它应该使用左联接而不是内部联接,以便显示根本没有发布任何事件的组织。由于您正在查找组织,因此您的查询应该选择“来自组织”而不是“来自事件”,它应该使用左连接而不是内部连接,以显示根本没有发布任何事件的组织。这非常有效,谢谢!对于未来的任何人,我确实希望显示上次创建的日期,在这种情况下,您可以在选择中添加MAXe.created_at来查看它。这非常有效,谢谢!对于未来的任何人,我确实希望显示上次创建的日期,在这种情况下,您可以在选择中添加MAXe.created_at来查看它。这非常有效,谢谢!对于未来的任何人,我确实希望显示上次创建的日期,在这种情况下,您可以在选择中添加MAXe.created_at来查看它。这非常有效,谢谢!对于未来的任何人,我确实希望显示上次创建的日期,在这种情况下,您可以在选择中添加MAXe.created_at以查看它。