[GELÖST] SQL für verknüpfte Tabellen?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

[GELÖST] SQL für verknüpfte Tabellen?

Beitragvon Soner » 19. Okt 2016, 16:57 [GELÖST] SQL für verknüpfte Tabellen?

Hallo,
ich habe drei Tabellen, die ich hier vereinfacht darstelle:
Code: Alles auswählen
 
bestrechnungen-Tabelle (Bestellungen/Rechnungen)
Recnr   - integer(id)
Tagtrnr   - integer
 
bestelllungen-TAbelle (Bestellte Produkte)
Besnr   - integer(id)
Recnr   - Verknüpfung mit bestrechnungen
Prodnr   - Integer(Produktnr)
 
prodeiglink-Tabelle (Produkteigenschaften, Ein Produkt kann mehrere Eigeschaften haben)
Pvnr   - integer (id)
Pvpenr   - integer (auswahl)
Pvprodnr- Integer(Produktnr)
 

Es gibt noch ein Produkttabelle und einige andere aber das brauchen wir hier nicht.

Aus dieser Db Selektiere ich Anzahl alle bestellten Produkte mit dem SQL-Befehl:
(Bedingung: Tagtrnr=58110
Code: Alles auswählen
 
SELECT bt.Prodnr, sum(bt.Menge) AS Menge FROM bestrechnungen br, bestelllungen bt
WHERE (br.Tagtrnr=58110) AND (bt.Recnr=br.Recnr)
GROUP BY bt.Prodnr
 

Das funktioniert wunderbar.

Aber jetzt wenn ich Bestellungen mit Tagtrnr=58110 und Pvpenr<>131 (Produkteigenschaft) auswähle mit:
Code: Alles auswählen
 
SELECT bt.Prodnr, sum(bt.Menge) AS Menge FROM bestrechnungen br, bestelllungen bt, prodeiglink pl
WHERE (br.Tagtrnr=58110) AND (bt.Recnr=br.Recnr)
AND (pl.Pvpenr<>131) AND (pl.Pvprodnr=bt.Prodnr)
GROUP BY bt.Prodnr
 

Dann werden einige Produkte mehrfach gezahlt, weil Produkte gleichzeitig viele verschiedene Eigenschaften haben können. "Select distinct ..." funktioniert, wegen der Funktion sum nicht. Ohne Sum funktioniert es.

Edit:
Nehmen wir an ein Produkt hat die Eigenschaft 1 und 2. Das soll dann einmal gezählt werden. Produkte mit der Eigenschaft 131 werden übersprungen.

Also ich suche einen SQL-Befehl mit dem ich Produkte zählen soll die nicht die Eigenschaft 131 hat (pl.Pvpenr<>131). Kennt jemand Lösung für das Problem?
Zuletzt geändert von Soner am 19. Okt 2016, 17:39, insgesamt 1-mal geändert.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon Eb » 19. Okt 2016, 17:28 Re: SQL für verknüpfte Tabellen?

Ich weiss nicht, welche Datenbank du einsetzt, aber bei MySQL kann man statt einer Tabelle im From-Abschnitt auch ein Select angeben.

das würde dann so aussehen: (evtl auch ohne das 'as')
Code: Alles auswählen
SELECT bt.Prodnr, sum(bt.Menge) AS Menge 
FROM bestrechnungen br
, bestelllungen bt
, (SELECT DISTINCT Pvprodnr FROM prodeiglink WHERE Pvprodnr <> 131) AS pl
WHERE (br.Tagtrnr=58110) AND (bt.Recnr=br.Recnr)
AND (pl.Pvprodnr=bt.Prodnr)
GROUP BY bt.Prodnr


Eb
Eb
 
Beiträge: 192
Registriert: 5. Feb 2008, 15:32
Wohnort: Stuttgart
OS, Lazarus, FPC: linux - Laz 1.4.2 | 
CPU-Target: 32Bit
Nach oben

Beitragvon Soner » 19. Okt 2016, 17:38 Re: SQL für verknüpfte Tabellen?

Ich habe es mit Subselect gelöst.
Ich hatte wieder vor lauter Bäume den Wald nicht gesehen. :oops:

@Eb:
Danke, ich habe auch Sub-Select verwendet, den hier:
Code: Alles auswählen
 
SELECT bt.Prodnr, sum(bt.Menge) AS Menge FROM bestrechnungen br, bestelllungen bt
WHERE (br.Tagtrnr=58110) AND (bt.Recnr=br.Recnr)
AND (
(SELECT DISTINCT pv.Pvprodnr FROM prodeiglink pv WHERE (pv.Pvpenr=131) AND (pv.Pvprodnr=bt.Prodnr)) IS NULL
)
GROUP BY bt.Prodnr
 
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried