如何 select MySQL 中的最大别名值
How to select the max aliased value in MySQL
我是 mysql 的新手,我这里有这个 SQL:
SELECT * , MAX(meeting_date) AS recent_meeting_date
FROM driver
INNER JOIN meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
INNER JOIN meeting ON meeting.meeting_id = meeting_attendee.meeting_id
WHERE recent_meeting_date < UTC_TIMESTAMP
GROUP BY driver_id
ORDER BY driver_id;
我有一个 driver
table,其中包含来自 meeting
table 的驱动程序详细信息和内部联接,其中有所有会议及其和 meeting_attendee
的列表table 其中列出了过去和将来参加会议的所有司机。
我需要一个 sql 来显示尚未预订会议的所有司机的列表,这意味着他们最近的会议日期小于今天的日期且不大于今天的日期。
这个 sql 不 运行 因为我们不能在 WHERE 子句中使用 recent_meeting_date
。我怎样才能修复 sql 使其正常工作?
您收到一个错误,因为您不能在 where 子句中使用别名引用。在您的查询中,您在 were 子句中引用了 recent_meeting_date
。要修复您的查询,您需要使用 HAVING 子句,您将能够解决您的问题。有关 WHERE 与 HAVING 的更多信息,请查看此 Whosebug
这是带有 having 子句的完整查询:
SELECT * , MAX(meeting_date) AS recent_meeting_date
FROM driver
INNER JOIN meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
INNER JOIN meeting ON meeting.meeting_id = meeting_attendee.meeting_id
GROUP BY driver_id
HAVING recent_meeting_date < UTC_TIMESTAMP
ORDER BY driver_id;
我是 mysql 的新手,我这里有这个 SQL:
SELECT * , MAX(meeting_date) AS recent_meeting_date
FROM driver
INNER JOIN meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
INNER JOIN meeting ON meeting.meeting_id = meeting_attendee.meeting_id
WHERE recent_meeting_date < UTC_TIMESTAMP
GROUP BY driver_id
ORDER BY driver_id;
我有一个 driver
table,其中包含来自 meeting
table 的驱动程序详细信息和内部联接,其中有所有会议及其和 meeting_attendee
的列表table 其中列出了过去和将来参加会议的所有司机。
我需要一个 sql 来显示尚未预订会议的所有司机的列表,这意味着他们最近的会议日期小于今天的日期且不大于今天的日期。
这个 sql 不 运行 因为我们不能在 WHERE 子句中使用 recent_meeting_date
。我怎样才能修复 sql 使其正常工作?
您收到一个错误,因为您不能在 where 子句中使用别名引用。在您的查询中,您在 were 子句中引用了 recent_meeting_date
。要修复您的查询,您需要使用 HAVING 子句,您将能够解决您的问题。有关 WHERE 与 HAVING 的更多信息,请查看此 Whosebug
这是带有 having 子句的完整查询:
SELECT * , MAX(meeting_date) AS recent_meeting_date
FROM driver
INNER JOIN meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
INNER JOIN meeting ON meeting.meeting_id = meeting_attendee.meeting_id
GROUP BY driver_id
HAVING recent_meeting_date < UTC_TIMESTAMP
ORDER BY driver_id;