sql >> Databáze >  >> RDS >> PostgreSQL

omezit hodnotu pole hodnotou z jiné tabulky před zápisem

Nepotřebujete UPDATE uvnitř spouště. Hodnotu můžete přiřadit NEW.votes_used

Použijte něco jako:

BEGIN
    IF (NEW.votes_used > (SELECT votes_available FROM vote_totals 
     WHERE vote_totals.user_id = NEW.user_id)) THEN
        NEW.votes_used := (SELECT votes_available FROM vote_totals 
         WHERE vote_totals.userID = NEW.user_id);
    END IF;
    RETURN NEW;
END;

Nebo

BEGIN
    NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available 
                                             FROM vote_totals 
                                             WHERE vote_totals.userID = NEW.user_id));
    RETURN NEW;
END;

Toto musí být BEFORE UPDATE spoušť do práce. (A jako všechny BEFORE UPDATE spouští, že musí RETURN NEW ).

Pokud chcete emulovat kontrolní omezení pomocí triggeru - zkuste něco jako:

BEGIN
    IF (NEW.votes_used > (SELECT votes_available  
                          FROM vote_totals 
                          WHERE vote_totals.user_id = NEW.user_id)) 
    THEN RAISE EXCEPTION 'Not enough votes';
    END IF;
    RETURN NEW;
END;


  1. MySQL:UNIKÁTNÍ omezení bez indexu

  2. Jednoduchý dotaz Oracle:doslovný neodpovídá formátovacímu řetězci

  3. Denormalizace:Kdy, proč a jak

  4. MySQL:Počítejte jednotlivé řádky za den