Käytetään varastopaikan tunnusta joineissa

Käytetään MySQL triggereitä päivittämään varaston tunnus tliausrivi, tapahtuma, tuotepaikat ja sarjaanumeroseuranta -tauluihin. Nyt saadaan primary key join, niin MySQL osaa käyttää indexejä.

Tarvittavat tietokantamuutokset löytyvät referenssistä.

Triggerien teko + päivitys:

```sql
CREATE trigger tapahtuma_insert_trigger before insert on tapahtuma for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger tapahtuma_update_trigger before update on tapahtuma for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger tuotepaikat_insert_trigger before insert on tuotepaikat for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger tuotepaikat_update_trigger before update on tuotepaikat for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger tilausrivi_insert_trigger before insert on tilausrivi for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger tilausrivi_update_trigger before update on tilausrivi for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger sarjanumeroseuranta_insert_trigger before insert on sarjanumeroseuranta for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));
CREATE trigger sarjanumeroseuranta_update_trigger before update on sarjanumeroseuranta for each row set new.varasto = (select varastopaikat.tunnus from varastopaikat where varastopaikat.yhtio = new.yhtio and concat(rpad(upper(varastopaikat.alkuhyllyalue), 5, '0'), lpad(upper(varastopaikat.alkuhyllynro), 5, '0')) <= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')) and concat(rpad(upper(varastopaikat.loppuhyllyalue), 5, '0'), lpad(upper(varastopaikat.loppuhyllynro), 5, '0')) >= concat(rpad(upper(new.hyllyalue), 5, '0'), lpad(upper(new.hyllynro), 5, '0')));

UPDATE tapahtuma set yhtio = yhtio where varasto is null;
UPDATE tuotepaikat set yhtio = yhtio where varasto is null;
UPDATE tilausrivi set yhtio = yhtio where varasto is null;
UPDATE sarjanumeroseuranta set yhtio = yhtio where varasto is null;
```