如果属于同一外部ID的所有多个行都具有相同的值,MYSQL将更新一行


MYSQL update a row if all multiple rows that belong to the same foreign ID have same value

我有三个表:schedulelocationssuites

时间表结构:schedule-idlocation-idschedule-completed-on-date

位置结构:location-idlocation-building-numberlocation-street-name

套房结构:suite-idlocation-idsuite-numbersuite-visited

许多套房可能属于同一位置。时间表的location-id是唯一的,因此在任何时候都可能只有一个唯一的时间表位置,没有重复。

我想将schedule-completed-date-on设置为一个日期,如果时间表行某个位置的每个套房的suite-visited都等于1(0-否,1-是(,我知道该怎么做。

MySQL有可能吗?如果有,怎么做?或者我必须使用服务器端语言以编程方式来完成它?

例如,如果我有两个位置——1 Main St.和2 Main St.——总共有10间套房——5间属于第一个位置,其他5间属于第二个位置。如果MySQL检测到与第一个位置相关的所有5个套件行的suite-visited都等于1,则立即将schedule-completed-on设置为当前日期,否则不设置。

手头数据和所需结果:

LOCATIONS
location-id     location-building-number    location-street-name
    1                   1                           Main St.
    2                   2                           Main St.
SUITES
suite-id    location-id     suite-number    suite-visited
    1           1               100             1
    2           1               200             0
    3           1               300             0
    4           1               400             0
    5           1               500             1
    6           2               1000            1
    7           2               1100            1
    8           2               1200            1
    9           2               1300            1
    10          2               1400            1
SCHEDULE
schedule-id     location-id     schedule-completed-on-date
    1               1                   NULL
    2               2               7/3/2015 00:00:00
// because all suites for location 2 have suite-visited set to 1
// second row under SCHEDULE gets the date set 
// because all suites belonging to
// location 2 have been visited

根据套件访问表的更新自动更新SCHEDULE的触发器,适当地命名触发器。

DELIMITER $$      
  CREATE TRIGGER trigger_name
  AFTER UPDATE
     ON suite-visited FOR EACH ROW      
  BEGIN      
      IF NOT EXISTS (select 1 from SUITES where suite-visited = 0 and location-id = new.location-id) THEN
          UPDATE SCHEDULE set schedule-completed-on-date = curdate() where location-id = new.location-id;
      END IF;
  END;
$$
DELIMITER ;