sql >> Database teknologi >  >> RDS >> PostgreSQL

grænse feltets værdi med værdi fra en anden tabel før skrivning

Du behøver ikke UPDATE inde i en udløser. Du kan tildele værdien til NEW.votes_used

Brug noget som:

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;

Eller

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

Dette skal være en BEFORE UPDATE trigger til at arbejde. (Og som alle BEFORE UPDATE udløser den skal RETURN NEW ).

Hvis du vil efterligne kontrolbegrænsning med trigger - prøv noget som:

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. Matchende udbud med efterspørgsel Udfordring

  2. Rows_sent:12 Rows_examined:549024 - hvordan optimerer man mySQL-forespørgslen?

  3. Referencefejl på node.js under inkluderingsfil

  4. Få den næsthøjeste værdi i en MySQL-tabel