Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dołącz do 2 stołów na dynamicznie zmieniającej się kolumnie

Jest to bolesne w MySQL z kilku powodów. Po pierwsze, MySQL nie ma zbyt dobrego wsparcia dla sum skumulowanych, które chcesz porównać.

Po drugie, twój zestaw wyników jest trochę słaby. Bardziej sensowne jest pokazanie wszystkich ins rekordy, które przyczyniają się do każdego outs nagrywaj, a nie tylko jeden z nich.

W tym celu możesz użyć sprzężenia na sumach skumulowanych, które wygląda tak:

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)

Tutaj jest SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeigniter - wiele połączeń z bazą danych

  2. Tydzień roku dla tygodni zaczynających się od soboty

  3. Wyczerpano dozwolony rozmiar pamięci 134217728 bajtów (próbowano przydzielić 42 bajty)

  4. Jaki jest cel character_set_connection?

  5. jak bezpieczne są sporządzone oświadczenia PDO