sql >> Databasteknik >  >> RDS >> Mysql

Gå med i 2 tabeller om dynamiskt föränderliga kolumner

Detta är smärtsamt att göra i MySQL av ett par anledningar. För det första har MySQL inte särskilt bra stöd för kumulativa summor, vilket är vad du vill jämföra.

Och för det andra är din resultatuppsättning lite svag. Det är mer meningsfullt att visa alla ins poster som bidrar till varje outs spela in, inte bara en av dem.

För detta ändamål kan du använda en koppling på kumulativa summor, som ser ut så här:

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)

Här är SQL Fiddle.



  1. MySQL ändrar UTF-8 till ASCII-8BIT

  2. MySQL CHAR()-funktion och UTF8-utgång?

  3. Kunde inte välja "OK" i mysql-apt-config [Ubuntu 14.04]

  4. PHP-fel:Maximal funktionskapslingsnivå på '100' har uppnåtts, avbryts