繁体   English   中英

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

[英]Mysql - Update row if value is not present in other rows of same table

我需要编写单个查询,如果该值已经存在于同一表中,它将更新行并跳过行。 即,我只想在不参加同一事件(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子句中指定目标表'm'进行更新”

WHERE (NOT EXISTS(select * from (select m1.id from tbl_games as m1 where m1.eventID=e.id and m1.team_id=1) as tmp))

这就是说“'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`)); 
\n \n
 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); 
\n \n
 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'); 
\n \n
 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 ); 
\n \n

db <> 在这里拨弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM