我正在使用MariaDB为一个基本的机场管理系统SQL数据库建模。我想创建一个事件"LastCall“,每次航班在30分钟内起飞时,它都会向表中添加一条消息。
到目前为止,我已经写好了代码:
CREATE TABLE LastCall(
TS TIMESTAMP,
Message Varchar(100));
DELIMITER $
CREATE EVENT LastCallInsert
ON SCHEDULE EVERY 1 second
DO
BEGIN
INSERT INTO LastCall(TS, Message)
SELECT
CURRENT_TIMESTAMP,
CONCAT("Last call for passengers on flight ",FLIGHT.Flight_ID,". Go to gate ",FLIGHT.GateID)
FROM FLIGHT
WHERE TIMEDIFF(FLIGHT.Expected_Time,CURRENT_TIMESTAMP) = "00:30:00" AND FLIGHT.Depart_Arrives = "Departure";
END; $
DELIMITER ;这是桌上的飞行:
CREATE TABLE Flight(
Flight_ID varchar(4) not null,
Depart_Arrives enum('Departure','Arrival'),
AirportID varchar(3),
AircraftREG varchar(6) not null,
Expected_Time datetime,
GateID varchar(3),
PRIMARY KEY(Flight_ID,Depart_Arrives),
FOREIGN KEY(AirportID) REFERENCES Airport(AirportID),
FOREIGN KEY(AircraftREG) REFERENCES Aircraft(AircraftREG),
FOREIGN KEY(GateID) REFERENCES Gate(GateID)
);它给出了错误代码:
错误代码: 1054。“字段列表”中的未知列“Expected_Time”
你知道为什么它不能理解我对Expected_Time的引用吗?
发布于 2020-04-02 06:09:10
实际上,您需要从FLIGHT表中执行SELECT操作,以查看航班是否满足条件--而您的IF语句没有做到这一点。
我认为您需要一条INSERT ... SELECT语句:
BEGIN
INSERT INTO LastCall (ts, message)
SELECT
CURRENT_TIMESTAMP,
CONCAT("Last call for passengers on flight ", FlightID, ". Go to gate ", GateID)
FROM Flight
WHERE
Expected_Time >= NOW() - INTERVAL 30 MINUTE
AND Expected_Time < NOW() - INTERVAL 29 MINUTE;
END;SELECT查询搜索expected_time距离现在正好30分钟的航班;您可能需要范围检查,而不是精确匹配(now()有秒)。如果找到行,则在目标表中插入相应的信息。
https://stackoverflow.com/questions/60981065
复制相似问题