Mysql
 sql >> Database >  >> RDS >> Mysql

Unisci 2 tabelle su colonne che cambiano dinamicamente

Questo è doloroso da fare in MySQL per un paio di motivi. Innanzitutto, MySQL non ha un ottimo supporto per le somme cumulative, che è ciò che vuoi confrontare.

E in secondo luogo, il tuo set di risultati è un po' debole. Ha più senso mostrare tutti i ins record che contribuiscono a ogni outs record, non solo uno di loro.

A tale scopo, puoi utilizzare un join su somme cumulative, che assomiglia a questo:

select o.*, (o.to_quantity  - o.quantity) as from_quantity,
       i.*
from (select o.*,
             (select sum(o2.quantity)
              from outs o2
              where o2.id <= o.id
             ) as to_quantity
      from outs o
     ) o join
     (select i.*,
             (select sum(i2.quantity)
              from ins i2
              where i2.id <= i.id
             ) as to_quantity
      from ins i
     ) i
     on (o.to_quantity  - o.quantity) < i.to_quantity and
        o.to_quantity > (i.to_quantity  - i.quantity)

Qui è SQL Fiddle.