Sql 检查触发器中的日期

Sql 检查触发器中的日期,sql,database,triggers,Sql,Database,Triggers,我有两个标签票,比赛,我想检查标签票内的日期,在比赛标签中,票的日期必须早于比赛日期。 我的扳机有问题,当我试着把一张新票放进去时,他给了我一个错误。1242-子查询返回超过1行 DELIMITER | CREATE TRIGGER ControllaBiglietto BEFORE INSERT ON Biglietto FOR EACH ROW BEGIN IF (SELECT Gara.Giorno FROM Gara, Biglietto WHERE Biglietto.Gara=Ga

我有两个标签票,比赛,我想检查标签票内的日期,在比赛标签中,票的日期必须早于比赛日期。 我的扳机有问题,当我试着把一张新票放进去时,他给了我一个错误。1242-子查询返回超过1行

DELIMITER |
CREATE TRIGGER ControllaBiglietto
BEFORE INSERT ON Biglietto
FOR EACH ROW
BEGIN
IF (SELECT Gara.Giorno FROM Gara, Biglietto WHERE 
Biglietto.Gara=Gara.Nome)>new.DataEmissione THEN
INSERT INTO Biglietto VALUES (new.Codice, new.Prezzo, NULL, 
new.Spettatore, new.Gara, new.Rivenditore);
ELSE 
INSERT INTO Biglietto VALUES (new.Codice, new.Prezzo, 
new.DataEmissione,new.Spettatore, new.Gara, new.Rivenditore); 
END IF ;
END

没有理由进行联接。我想你想要:

IF (SELECT Gara.Giorno
    FROM Gara
    WHERE new.Gara = Gara.Nome
   ) > new.DataEmissione THEN
    INSERT INTO Biglietto ( . . .)
        VALUES (new.Codice, new.Prezzo, NULL, new.Spettatore, new.Gara, new.Rivenditore);
ELSE 
    INSERT INTO Biglietto ( . . . )
        VALUES (new.Codice, new.Prezzo, new.DataEmissione,new.Spettatore, new.Gara, new.Rivenditore); 
END IF ;

使用INSERT时,还应列出要插入的所有列。如果您正在学习SQL语言,学习如何编写好SQL尤为重要。

从Gara、Biglietto中选择Gara.Giorno的行数是多少,其中Biglietto.Gara=Gara.Nome return?由于WHERE子句是一个隐藏的子句,考虑使用显式连接,我猜想它不止一行。将其更改为只生成一行。此查询返回许多行,这是一个问题,因为我想检查车票日期和比赛日期之间的关系。您使用的是哪一行?SQL只是一种查询语言,不是特定数据库产品的名称,触发器是高度特定于供应商的。如果Biglietto中的日期大于Gara.Giorno,我只需要用NULL修改该日期