我对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
表,其中包含驱动程序详细信息和来自meeting
表的内部联接,其中有所有会议的列表,而meeting_attendee
表中有过去和将来参加会议的所有驱动程序的列表。
我需要一个sql,显示所有尚未预订会议的司机的列表,这意味着他们最近的会议日期小于今天的日期,不大于今天的日期。
这个sql不会运行,因为我们不能在WHERE子句中使用recent_meeting_date
。如何修复sql以使其正常工作?
由于不能在where子句中使用别名引用,因此出现错误。在查询中,您引用了are子句中的recent_meeting_date
。若要修复查询,您需要使用HAVING子句,这样您就可以解决问题。要了解更多关于WHERE与HAVING的信息,请查看此stackoverflow
以下是包含have子句的完整查询:
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;