比较不同表中的两个值-MySql

比较不同表中的两个值-MySql,mysql,sql,mysql-workbench,workbench,Mysql,Sql,Mysql Workbench,Workbench,在插入学术报告的“年份”栏之前,我需要检查是否不少于学生报告中“入学日期”栏的年份 我的桌子: CREATE TABLE STUDENT ( BCN INT (10) , Enrollment_Date timestamp not null default CURRENT_TIMESTAMP, primary key (BCN), ); CREATE TABLE ACADEMIC_REPORT ( Stud_Num INT(10) , Year

在插入学术报告的“年份”栏之前,我需要检查是否不少于学生报告中“入学日期”栏的年份

我的桌子:

CREATE TABLE STUDENT
(
 BCN INT (10) ,
 Enrollment_Date timestamp not null default CURRENT_TIMESTAMP, 
 primary key (BCN),          
);


CREATE TABLE ACADEMIC_REPORT
( 
    Stud_Num INT(10) ,
    Year year ,
    primary key (Stud_Num , Year ),

    foreign key (Stud_Num ) references STUDENT( BCN )
    ON DELETE restrict       ON UPDATE CASCADE
);
我试过这个:

    /* ACADEMIC_REPORT._Year Constraint "BEFORE INSERT" */
delimiter //    
CREATE TRIGGER ReportYearBIN BEFORE INSERT ON  ACADEMIC_REPORT
FOR EACH ROW
BEGIN
   declare  num  int(10);
   SET num= (SELECT BCN
             FROM STUDENT , ACADEMIC_REPORT 
             WHERE BCN = ACADEMIC_REPORT.Stud_Num );

        IF (ACADEMIC_REPORT.Year < YEAR(num.Enrollment_Date))
        THEN
    SIGNAL SQLSTATE '10000'
        SET MESSAGE_TEXT = 'Error....!';
    END IF;
END;
// delimiter ;
我该怎么做呢

使用MySql workbench 6.3


提前感谢。

好的,我为您要生成错误的条件创建了一个select语句。如果此报告的学生存在,且报告年度小于学生注册日期,则将为select查询生成一行或多行。继续查找的行将大于0,这将触发错误消息


我已经解决了问题:

这个说法是完全错误的,

 YEAR(num.Enrollment_Date)
因为写入attribute.attribute不正确,所以只能使用Table.attribute

所以,这里是解决方案

    /* ACADEMIC_REPORT._Year Constraint "BEFORE INSERT" */
delimiter //    
CREATE TRIGGER ReportYearBIN BEFORE INSERT ON  ACADEMIC_REPORT
FOR EACH ROW
BEGIN
   declare Enroll timestamp;
   SET Enroll = (SELECT Enrollment_Date
                 FROM STUDENT 
                 WHERE BCN = new.Stud_Num);

        IF ( new._year < YEAR(Enroll))
        THEN
    SIGNAL SQLSTATE '10000'
        SET MESSAGE_TEXT = 'Error..The Report year cannot be less than the enrollment year..!';
    END IF;
END;
// delimiter ;

您可能需要使用触发器执行此操作。请参阅new是对基础触发器表的传入行值的引用。您需要从学生中进行选择,以获得您可以比较的值。感谢您抽出时间。您的代码在create trigger语句期间产生此错误。错误代码:1415。不允许从触发器返回结果集
 YEAR(num.Enrollment_Date)
    /* ACADEMIC_REPORT._Year Constraint "BEFORE INSERT" */
delimiter //    
CREATE TRIGGER ReportYearBIN BEFORE INSERT ON  ACADEMIC_REPORT
FOR EACH ROW
BEGIN
   declare Enroll timestamp;
   SET Enroll = (SELECT Enrollment_Date
                 FROM STUDENT 
                 WHERE BCN = new.Stud_Num);

        IF ( new._year < YEAR(Enroll))
        THEN
    SIGNAL SQLSTATE '10000'
        SET MESSAGE_TEXT = 'Error..The Report year cannot be less than the enrollment year..!';
    END IF;
END;
// delimiter ;