Mysql 更新内部联接选择语句不起作用。我有正确的语法吗?

Mysql 更新内部联接选择语句不起作用。我有正确的语法吗?,mysql,sql,Mysql,Sql,我正在开发一个数据库,该数据库将使用状态表中的数据总和自动更新totals表中的数据。我需要在日期前完成计算。我希望每天每个字段都有一个总数。每次我使用下面的代码时,我都会收到一个语法错误 CREATE TABLE pc12_status (hobbs_start decimal(5,2) NOT NULL, hobbs_end decimal(5,2) NOT NULL PRIMARY KEY, t

我正在开发一个数据库,该数据库将使用状态表中的数据总和自动更新totals表中的数据。我需要在日期前完成计算。我希望每天每个字段都有一个总数。每次我使用下面的代码时,我都会收到一个语法错误

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");

可以在插入行后运行更新,如果不插入行,则无法更新行。所以,您应该首先插入行。其他方面,您必须在插入触发器后创建。但是,在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;

使用联接进行更新的语法: 对于常规更新连接:

   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

请根据需要更改更新查询中以下代码部分的别名:

    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;
试试这个。

检查这个:

它起作用了


如果SQL语法中有错误,请包含您得到的错误;检查与您的MySQL服务器版本对应的手册,了解使用第6行“内部连接选择SUMhobbs_end-hobbs_开始飞行小时数,和l”的正确语法是否更好:为每行插入pc12_状态后创建触发器upd_总计插入pc12_总计飞行小时数、着陆总小时数、发动机循环数,航班日期,尾号按航班日期从pc12_状态组中选择SUMhobbs_end-hobbs_start航班小时数,SUMlandings着陆总数,SUMengine_循环引擎_循环,航班日期,尾号?尝试了这个之后,我得到了一个错误,说您的SQL语法有错误;在没有其他信息的情况下,检查与您的MySQL服务器版本相对应的手册,以了解可在“”附近使用的正确语法。尝试此操作后,我收到一个错误,表明您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以了解在没有其他信息的情况下在“”附近使用的正确语法。请检查demo your r r missing single quateYour的链接只有在更新之前输入数据时,您的demo才能工作。我需要能够在之后输入数据,并且仍然可以看到更新的表。此外,我需要能够在不运行sum命令的情况下查看表。这只是totals表的一部分。即使在更新之后,它仍然有效。。检查…我已更改内部联接的别名。
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