Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-如果同一表的其他行中不存在值,则更新行_Mysql - Fatal编程技术网

Mysql-如果同一表的其他行中不存在值,则更新行

Mysql-如果同一表的其他行中不存在值,则更新行,mysql,Mysql,我需要编写一个查询,如果同一个表中已经存在该值,它将更新行并跳过行。 i、 e.我只想在该队未参加同一事件(eventID)的游戏时,将该队更新到游戏 这是一个问题 update tbl_games m INNER JOIN bcs_event e on e.id = m.eventID SET m.team_id=1; 我在where语句中尝试了以下两种解决方案 WHERE(NOT EXISTS(select m1.id from tbl_games as m1 where m1.even

我需要编写一个查询,如果同一个表中已经存在该值,它将更新行并跳过行。 i、 e.我只想在该队未参加同一事件(eventID)的游戏时,将该队更新到游戏

这是一个问题

update tbl_games m INNER JOIN bcs_event e on e.id = m.eventID SET m.team_id=1;
我在where语句中尝试了以下两种解决方案

WHERE(NOT EXISTS(select m1.id from tbl_games  as m1 where m1.eventID=e.id and m1.team_id=1 ))
这表示“不能在FROM子句中为update指定目标表'm'”

这表示“where子句”中的未知列“e.id”

以下是示例数据

CREATE TABLE bcs_event (
  `id` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));

CREATE TABLE tbl_games (
  `id` INT NOT NULL AUTO_INCREMENT,
  `event_id` INT NULL,
  `team_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `evid_idx` (`event_id` ASC),
  CONSTRAINT `evid`
    FOREIGN KEY (`event_id`)
    REFERENCES bcs_event (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

INSERT INTO bcs_event (`Name`) VALUES ('Softball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Baseball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Soccer Event');

INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '11');
INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '22');
INSERT INTO tbl_games (`event_id`) VALUES ('1');
INSERT INTO tbl_games (`event_id`) VALUES ('1'); 

update tbl_games m INNER JOIN bcs_event e on e.id = m.event_id SET m.team_id=11
where m.team_id is NULL and (NOT EXISTS(select g.id from tbl_games as g where g.eventID=e.id and g.team_id=11));
试试这个:

✓ dbfiddle

试试这个:


dbfiddle

你能提供样本数据和预期输出吗?@Simonare我在postcan中添加了样本数据。你能提供样本数据和预期输出吗?@Simonare我在Post中添加了样本数据。事实上,我需要bcs_事件与tbl_游戏结合,以访问事件表中的更多信息。这就是为什么不能从JOINYes中删除事件表的原因,我以前也尝试过。这是说“where子句”中的未知列“e.id”,请查看主帖子。。我已经添加了示例数据,实际上我需要bcs_事件与tbl_游戏结合,以访问事件表中的更多信息。这就是为什么不能从JOINYes中删除事件表的原因,我以前也尝试过。这是说“where子句”中的未知列“e.id”,请查看主帖子。。我添加了示例数据
CREATE TABLE bcs_event (
  `id` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));

CREATE TABLE tbl_games (
  `id` INT NOT NULL AUTO_INCREMENT,
  `event_id` INT NULL,
  `team_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `evid_idx` (`event_id` ASC),
  CONSTRAINT `evid`
    FOREIGN KEY (`event_id`)
    REFERENCES bcs_event (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

INSERT INTO bcs_event (`Name`) VALUES ('Softball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Baseball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Soccer Event');

INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '11');
INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '22');
INSERT INTO tbl_games (`event_id`) VALUES ('1');
INSERT INTO tbl_games (`event_id`) VALUES ('1'); 

update tbl_games m INNER JOIN bcs_event e on e.id = m.event_id SET m.team_id=11
where m.team_id is NULL and (NOT EXISTS(select g.id from tbl_games as g where g.eventID=e.id and g.team_id=11));
CREATE TABLE bcs_event (
  `id` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
CREATE TABLE tbl_games (
  `id` INT NOT NULL AUTO_INCREMENT,
  `event_id` INT NULL,
  `team_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `evid_idx` (`event_id` ASC),
  CONSTRAINT `evid`
    FOREIGN KEY (`event_id`)
    REFERENCES bcs_event (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);
INSERT INTO bcs_event (`Name`) VALUES ('Softball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Baseball Event');
INSERT INTO bcs_event (`Name`) VALUES ('Soccer Event');
INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '11');
INSERT INTO tbl_games (`event_id`, `team_id`) VALUES ('1', '22');
INSERT INTO tbl_games (`event_id`) VALUES ('1');
INSERT INTO tbl_games (`event_id`) VALUES ('1');
update tbl_games m 
INNER JOIN bcs_event e 
  on e.id = m.event_id 
SET m.team_id=11
where m.team_id is NULL and 
NOT EXISTS ( 
  select l.id 
  from (select g.id from tbl_games as g 
  where g.event_id=(SELECT e.id 
                         FROM   bcs_event e 
                         WHERE e.id = g.event_id) and g.team_id=11) l
  );