Mysql errno 1242 子查询 returns 超过一列
Mysql errno 1242 subquery returns for than one column
我创建了一个触发器来确保 en employees shift 不与该员工的另一个班次重叠但是当员工在同一天有一个以上的班次时我收到错误“subquery returns more多于一列”,有解决办法吗?
delimiter //
CREATE TRIGGER work_time_constraints
BEFORE INSERT ON shifts
FOR EACH ROW
BEGIN
IF new.start_time BETWEEN (SELECT start_time FROM shifts WHERE new.employeeID = employeeID
AND CONVERT(new.start_time, DATE) = CONVERT(start_time, DATE))
AND (SELECT end_time FROM shifts WHERE new.employeeID = employeeID AND CONVERT(new.end_time,
DATE) = CONVERT(end_time, DATE))
OR new.end_time BETWEEN (SELECT start_time FROM shifts WHERE new.employeeID = employeeID AND
CONVERT(new.start_time, DATE) = CONVERT(start_time, DATE))
AND (SELECT end_time FROM shifts WHERE new.employeeID = employeeID AND CONVERT(new.end_time,
DATE) = CONVERT(end_time, DATE))
THEN SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = 9997,
MESSAGE_TEXT = 'Shift overlaps existing shift for this employee';
END IF;
END//
delimiter ;
CREATE TRIGGER work_time_constraints
BEFORE INSERT ON shifts
FOR EACH ROW
BEGIN
IF EXISTS ( SELECT NULL
FROM shifts
WHERE employeeID = NEW.employeeID
AND DATE(start_time) < DATE(NEW.end_time)
AND DATE(NEW.start_time) < DATE(end_time) ) THEN
SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = 9997, MESSAGE_TEXT = 'Shift overlaps existing shift for this employee';
END IF;
END
我创建了一个触发器来确保 en employees shift 不与该员工的另一个班次重叠但是当员工在同一天有一个以上的班次时我收到错误“subquery returns more多于一列”,有解决办法吗?
delimiter //
CREATE TRIGGER work_time_constraints
BEFORE INSERT ON shifts
FOR EACH ROW
BEGIN
IF new.start_time BETWEEN (SELECT start_time FROM shifts WHERE new.employeeID = employeeID
AND CONVERT(new.start_time, DATE) = CONVERT(start_time, DATE))
AND (SELECT end_time FROM shifts WHERE new.employeeID = employeeID AND CONVERT(new.end_time,
DATE) = CONVERT(end_time, DATE))
OR new.end_time BETWEEN (SELECT start_time FROM shifts WHERE new.employeeID = employeeID AND
CONVERT(new.start_time, DATE) = CONVERT(start_time, DATE))
AND (SELECT end_time FROM shifts WHERE new.employeeID = employeeID AND CONVERT(new.end_time,
DATE) = CONVERT(end_time, DATE))
THEN SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = 9997,
MESSAGE_TEXT = 'Shift overlaps existing shift for this employee';
END IF;
END//
delimiter ;
CREATE TRIGGER work_time_constraints
BEFORE INSERT ON shifts
FOR EACH ROW
BEGIN
IF EXISTS ( SELECT NULL
FROM shifts
WHERE employeeID = NEW.employeeID
AND DATE(start_time) < DATE(NEW.end_time)
AND DATE(NEW.start_time) < DATE(end_time) ) THEN
SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = 9997, MESSAGE_TEXT = 'Shift overlaps existing shift for this employee';
END IF;
END