müsste auch über eine einfache Gruppierung gehen:
SQL-Code:
select
a.Bestand,
b.Reserviert,
a.Bestand - ifnull(b.Reserviert,0) As Diff
from
tab1 a left outer join
(
select
Name,
Sum(Menge) As Reserviert -- Aggregatfunktionen ignorieren NULL-Werte
from tab2
Group By 1
) b
on a.name=b.name
Je nach
DBMS ist diese Variante schneller.
Übrigens: Verzichte bitte auf die Verknüpfung über den Namen und nimm einen nichtssagenden Schlüssel (Primary Key, Autoinc -bäh- oder
GUID). Einmal den Namen falsch geschrieben, findest Du die richtige Menge nicht mehr.
Und noch eine ganz exotische Geschichte, die eventuell noch mehr Performance bringen kann - und vor allem auch hilft, falls Du mehrere Bestände des gleichen Artikels in Tab1 hast:
SQL-Code:
select
name,
sum(bestand) as bestand,
sum(reserviert) as reserviert,
sum(bestand)-sum(reserviert) as diff
from
(
select name, bestand, 0 as reserviert from tab1
union
select name, 0 as bestand, reserviert from tab2
)
group by 1