Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbinden Sie 2 Tabellen in einer sich dynamisch ändernden Spalte

Dies ist in MySQL aus mehreren Gründen mühsam. Erstens bietet MySQL keine sehr gute Unterstützung für kumulative Summen, was Sie vergleichen möchten.

Und zweitens ist Ihre Ergebnismenge etwas schwach. Es ist sinnvoller, alle anzuzeigen die ins Aufzeichnungen, die zu jedem outs beitragen Rekord, nicht nur einer von ihnen.

Zu diesem Zweck können Sie einen Join für kumulierte Summen verwenden, der so aussieht:

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)

Hier ist die SQL-Geige.