AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Join über 3 Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Join über 3 Tabellen

Ein Thema von Hansa · begonnen am 3. Mär 2004 · letzter Beitrag vom 6. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Join über 3 Tabellen

  Alt 3. Mär 2004, 12:50
Hi,

folgendes Problem: Artikel, Preisgruppen und Sonderpreis - Table. Jeder Kunde hat x Datensätze mit Preisen. Ich gehe also über die Sonderpreis-Table. Ist der Preis <> 0, so zeige ich ihn an. Ist er = 0 so brauche ich den zugehörigen Preis des Artikels aus der Preisgruppen-Tabelle. Ich mache deshalb einen INNER JOIN über die Sonderpreise. Hierdurch zeigt er mir alle Sonderpreise eines Kunden an.

Wie kann ich es nun bewerkstelligen, im Falle, daß der Sonderpreis 0 ist, den Preisgruppen-Preis anzuzeigen ?

Delphi-Quellcode:
ArtDS.SelectSQL.Text := 'SELECT ART.*,SP.* FROM SP INNER JOIN SP';
    ArtDS.SelectSQL.Text := ArtDS.SelectSQL.Text + ' ON ART.ID=SP.ID_ART';
    ArtDS.SelectSQL.Text := ArtDS.SelectSQL.Text + ' WHERE ID_KUNDE = '+
                            KuDS.FieldByName ('ID').AsString+' ORDER BY NR';
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Join über 3 Tabellen

  Alt 3. Mär 2004, 12:57
Hai Hansa,

unterstützt deine Datenbank eventuell if oder case Befehle?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Join über 3 Tabellen

  Alt 3. Mär 2004, 13:14
Du kannst ja mal schauen, ob einer der beiden Vorschläge läuft (Oracle syntax)...


SQL-Code:
SELECT ART.*,
       SP.*,
       Decode(SP.Preis, 0, ART.Preis, SP.Preis) SonderPreis
FROM SP Inner Join SP On ART.ID = SP.ID_ART
WHERE ID_KUNDE = :i_ID
ORDER By NR
SQL-Code:
SELECT ART.*,
       SP.*,
       Case When SP.Preis = 0 Then
           ART.Preis
          Else
           SP.Preis
       End SonderPreis
FROM SP Inner Join SP On ART.ID = SP.ID_ART
WHERE ID_KUNDE = :i_ID
ORDER By NR
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Join über 3 Tabellen

  Alt 3. Mär 2004, 16:16
Es ist Interbase. Wie es aussieht wird CASE nicht unterstützt, wohl aber IF. Weiter bin ich noch nicht. Vielleicht habe ich die Frage auch falsch gestellt.
Code:
Sonderpreis --> <> 0 --> anzeigen
           
            --> = 0  --> in anderer Tabelle (Preisgruppe) suchen
Gruß
Hansa
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Join über 3 Tabellen

  Alt 3. Mär 2004, 16:23
Das hatte ich so schon verstanden. Da ich deine Spaltennamen nicht kenne, habe ich sie einfach Preis bzw. Sonderpreis (in der Abfrage) genannt.
Zu einer der beiden Herangehensweisen wird es in IB bestimmt eine Lösung geben.
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: Join über 3 Tabellen

  Alt 4. Mär 2004, 16:00
btw mit firebird 1.5 hättest du ne case anweisung

bei interbase würde ich das über einen
union machen

1. Teil
preis <> 0 mit sonderpreise

2. Teil
Preis = 0 mir preisgruppenpreisen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Join über 3 Tabellen

  Alt 4. Mär 2004, 16:42
Jupp, man könnte es ja auch mit einem UNION-SELECT lösen:

SQL-Code:
SELECT ART.*,
       SP.*,
       ART.Preis SonderPreis
FROM SP Inner Join SP On ART.ID = SP.ID_ART
WHERE ID_KUNDE = :i_ID And SP.Preis = 0
UNION
SELECT ART.*,
       SP.*,
       SP.Preis SonderPreis
FROM SP Inner Join SP On ART.ID = SP.ID_ART
WHERE ID_KUNDE = :i_ID And SP.Preis <> 0

ORDER By NR
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Join über 3 Tabellen

  Alt 4. Mär 2004, 18:09
wenn ich das nun so mache:

SQL-Code:
SELECT ART.*,SP.* FROM ART INNER JOIN SP ON ART.ID=SP.ID_ART
WHERE ID_KUNDE = 661 AND VP <> 0
UNION
SELECT ART.*,PG.* FROM ART INNER JOIN PG ON ART.ID=PG.ID_ART
WHERE PGNR = 1

kommt diese Fehlermeldung:

count of column list and variable list do not match.
Gruß
Hansa
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Join über 3 Tabellen

  Alt 4. Mär 2004, 19:17
Bei einem UNION SELECT müssen die Spalten der beiden Abfragen den gleichen Datentype haben (jeweils die, die untereinander stehen).
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Join über 3 Tabellen

  Alt 4. Mär 2004, 20:22
Stimmt, das muß ja alles ziemlich gleich sein.

SQL-Code:
SELECT ART.NR,ART.bez, SP.ID, SP.VP FROM
ART INNER JOIN SP ON ART.ID=SP.ID_ART
WHERE ID_KUNDE = 661 AND VP <> 0
UNION
SELECT ART.NR,ART.bez, ARTPG.ID, ARTPG.PG FROM
ART INNER JOIN ARTPG ON ART.ID=ARTPG.ID_ART
Hiermit erhalte ich schon etwas in der gewünschten Richtung, nur leider viel zu viel, denn :

WHERE ID_KUNDE = 661 AND VP = 0

läßt sich nicht im 2. Abschnitt einbauen. Die Preisgruppen haben nichts mit den Kunden zu tun, die Sonderpreise aber sehr wohl. Ich müßte nun also das Feld ID_KUNDE neutralisieren, dann müßte es fast so gehen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz