我正在开发一个数据库,它将使用状态表中的数据总和自动更新总计表中的数据。我需要按日期完成计算。我希望每尾每个字段有一个总数_no。每次我使用下面的代码时,都会收到语法错误。
CREATE TABLE pc12_status (hobbs_start decimal(5,2) NOT NULL,
hobbs_end decimal(5,2) NOT NULL PRIMARY KEY,
tail_no int(5) NOT NULL,
landings int(5) NOT NULL,
engine_cycles int(5) NOT NULL,
flight_date date NOT NULL);
CREATE TABLE pc12_totals (flight_hours decimal (5,2) NOT NULL,
landings_total int(5) NULL,
engine_cycles int(5) NULL,
flight_date date NOT NULL,
tail_no int(5) NOT NULL,
PRIMARY KEY (tail_no, flight_date));
UPDATE pc12_totals
SET pc12_totals.flight_hours = pc12_status.flight_hours,
pc12_totals.landings_total = pc12_status.landings,
pc12_totals.engine_cycles = pc12_status.engine_cycles,
pc12_totals.flight_date = pc12_status.flight_date,
pc12_totals.tail_no = pc12_status.tail_no
FROM pc12_status
INNER JOIN (SELECT SUM(hobbs_end - hobbs_start) flight_hours,
SUM (landings) landings_total, sum(engine_cycles) engine_cycles,
flight_date,
tail_no
FROM pc12_status
GROUP BY flight_date)
pc12_totals ON pc12_totals.tail_no = pc12_status.tail_no;
INSERT INTO pc12_status VALUES (1.7, 1.9, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (1.9, 2.8, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (2.8, 4.5, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (4.5, 6.7, 1378, 2, 1, "1987-12-18");
INSERT INTO pc12_status VALUES (6.7, 7.4, 1378, 2, 1, "1987-12-18");
INSERT INTO pc12_status VALUES (7.4, 8.9, 1378, 2, 1, "1987-12-19");
答案 0 :(得分:0)
更新可以在插入行后运行,无需插入就无法更新行。所以,你应该首先插入行。另外,你必须在插入触发器后创建。但是,在你的情况下,在mysql更新查询中可能会写如下:
UPDATE pc12_totals INNER JOIN (SELECT SUM(hobbs_end - hobbs_start)
flight_hours, SUM (landings) landings_total, SUM(engine_cycles)
engine_cycles, flight_date, tail_no FROM pc12_status GROUP BY
flight_date, tail_no) pc12_status ON pc12_status.tail_no =
pc12_totals.tail_no
SET pc12_totals.flight_hours = pc12_status.flight_hours,
pc12_totals.landings_total = pc12_status.landings,
pc12_totals.engine_cycles = pc12_status.engine_cycles,
pc12_totals.flight_date = pc12_status.flight_date,
pc12_totals.tail_no = pc12_status.tail_no;
答案 1 :(得分:0)
语法使用join进行更新: 对于一般更新加入:
UPDATE TABLEA a
JOIN TABLEB b ON a.join_colA = b.join_colB
SET a.columnToUpdate = [something]
因此,您的已更正查询是:
UPDATE pc12_totals
JOIN (
SELECT SUM(hobbs_end - hobbs_start) flight_hours,
SUM (landings) landings_total, sum(engine_cycles) engine_cycles,
flight_date,
tail_no
FROM pc12_status
GROUP BY flight_date
) AS
pc12_status ON pc12_totals.tail_no = pc12_status.tail_no
SET pc12_totals.flight_hours = pc12_status.flight_hours,
pc12_totals.landings_total = pc12_status.landings,
pc12_totals.engine_cycles = pc12_status.engine_cycles,
pc12_totals.flight_date = pc12_status.flight_date,
pc12_totals.tail_no = pc12_status.tail_no
答案 2 :(得分:0)
请根据需要更改更新查询中的别名:
UPDATE pc12_totals
SET pc12_totals.flight_hours = pc12_status.flight_hours,
pc12_totals.landings_total = pc12_status.landings,
pc12_totals.engine_cycles = pc12_status.engine_cycles,
pc12_totals.flight_date = pc12_status.flight_date,
pc12_totals.tail_no = pc12_status.tail_no
FROM pc12_status
INNER JOIN (SELECT SUM(hobbs_end - hobbs_start) flight_hours,
SUM (landings) landings_total, sum(engine_cycles) engine_cycles,
flight_date,
tail_no
FROM pc12_status
GROUP BY flight_date)
pc12_tota ON pc12_tota .tail_no = pc12_status.tail_no;
试试这个。
答案 3 :(得分:0)
检查一下:
它的工作 Demo
CREATE TABLE pc12_status (hobbs_start decimal(5,2) NOT NULL,
hobbs_end decimal(5,2) NOT NULL PRIMARY KEY,
tail_no int(5) NOT NULL,
landings int(5) NOT NULL,
engine_cycles int(5) NOT NULL,
flight_date date NOT NULL);
CREATE TABLE pc12_totals (flight_hours decimal (5,2) NOT NULL,
landings_total int(5) NULL,
engine_cycles int(5) NULL,
flight_date date NOT NULL,
tail_no int(5) NOT NULL,
PRIMARY KEY (tail_no, flight_date));
INSERT INTO pc12_status VALUES (1.7, 1.9, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (1.9, 2.8, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (2.8, 4.5, 1378, 2, 1, "1987-12-17");
INSERT INTO pc12_status VALUES (4.5, 6.7, 1378, 2, 1, "1987-12-18");
INSERT INTO pc12_status VALUES (6.7, 7.4, 1378, 2, 1, "1987-12-18");
INSERT INTO pc12_status VALUES (7.4, 8.9, 1378, 2, 1, "1987-12-19");
UPDATE pc12_totals
JOIN (
SELECT SUM(hobbs_end - hobbs_start) flight_hours,
SUM(landings) landings_total, sum(engine_cycles) engine_cycles,
flight_date,
tail_no,landings
FROM pc12_status
GROUP BY flight_date
) AS
pc12_status ON pc12_totals.tail_no = pc12_status.tail_no
SET pc12_totals.flight_hours = pc12_status.flight_hours,
pc12_totals.landings_total = pc12_status.landings,
pc12_totals.engine_cycles = pc12_status.engine_cycles,
pc12_totals.flight_date = pc12_status.flight_date,
pc12_totals.tail_no = pc12_status.tail_no