Mysql
 sql >> Base de données >  >> RDS >> Mysql

Joindre 2 tables sur une colonne changeant dynamiquement

C'est pénible à faire dans MySQL pour plusieurs raisons. Tout d'abord, MySQL ne prend pas très bien en charge les sommes cumulées, ce que vous voulez comparer.

Et deuxièmement, votre ensemble de résultats est un peu faible. Il est plus logique de montrer tous les ins enregistrements qui contribuent à chaque outs enregistrer, pas seulement l'un d'entre eux.

Pour cela, vous pouvez utiliser une jointure sur les sommes cumulées, qui ressemble à ceci :

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)

Ici est le violon SQL.