AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Simple SQL-Abfrage mit Fremdschlüssel
Thema durchsuchen
Ansicht
Themen-Optionen

Simple SQL-Abfrage mit Fremdschlüssel

Ein Thema von MatthiasR · begonnen am 28. Mai 2009 · letzter Beitrag vom 29. Mai 2009
Antwort Antwort
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 11:20
Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: ZeosLib
Für die meisten von euch, die halbwegs SQL-bewandert sind, ist meine Frage sicherlich ziemlich banal. Da ich aber schon lange nicht mehr mit SQL konfrontiert war, komme ich einfach nicht auf die richtige Lösung.

Ich habe eine simple Tabelle, z.B. "kunden", bestehend aus den Spalten "kunden_id" und "kundenname". Diese Tabelle wird von einer anderen genutzt mittels Fremdschlüssel. Nennen wir sie "bestellungen". Einer Bestellung kann ein Kunde mittels Fremdschlüssel zugeordnet werden, muss aber nicht (Fremdschlüssel-Spalte darf also NULL sein).

Nun möchte ich mittels SQL alle Bestellungen abfragen und gleichzeitig dazu den zugehörigen Kundennamen, falls ein Kunde angegeben wurde. Wie mache ich das?

Bisher hab ich sowas immer in die WHERE-Klausel gepackt:
SQL-Code:
SELECT b.bestellungsnummer, k.kundenname
FROM bestellungen b, kunden k
WHERE b.kunden_id = k.kunden_id;
Nur wenn jetzt in der Tabelle "bestellungen" mal kein Kunde angegeben ist, wird diese Bestellung übersprungen. Sie soll aber trotzdem zurück gegeben werden, dann halt mit leerem Namensfeld. Wie geht das nochmal? Sicherlich trivial, aber ich komm nicht drauf.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 11:32
Du benötigst einen OUTER JOIN. Dies geht aber nur mit einem expliziten Join ( implizite, wie in deinem Beispiel sind immer INNER JOINS)

SQL-Code:
SELECT
    b.bestellungsnummer, k.kundenname
FROM
    bestellungen b
        left join kunden k on k.id = b.kunden.id;
Markus Kinzler
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#3

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 11:40
Zitat von mkinzler:
Du benötigst einen OUTER JOIN. Dies geht aber nur mit einem expliziten Join ( implizite, wie in deinem Beispiel sind immer INNER JOINS)

SQL-Code:
SELECT
    b.bestellungsnummer, k.kundenname
FROM
    bestellungen b
        left join kunden k on k.id = b.kunden.id;
Funzt . Auf das mit dem LEFT JOIN wäre ich aber im Lebtag nicht gekommen...
Ich sage vielen Dank!

EDIT: "LEFT JOIN" ist das gleiche wie "LEFT OUTER JOIN" nur kürzer? Oder gibts Unterschiede (konnte zumindest keine feststellen)?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 11:54
Zitat:
"LEFT JOIN" ist das gleiche wie "LEFT OUTER JOIN" nur kürzer? Oder gibts Unterschiede (konnte zumindest keine feststellen)?
Ja das ist das Selbe
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 15:10
Dumme Nachfrage:

was ist mit
WHERE b.kunden_id = k.kunden_id(+) ;

So sollte es (zumindestens unter Oracle) auch funktionieren.

Gruß
K-H
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 28. Mai 2009, 15:25
Zitat von p80286:
Dumme Nachfrage:

was ist mit
WHERE b.kunden_id = k.kunden_id(+) ;

So sollte es (zumindestens unter Oracle) auch funktionieren.

Gruß
K-H
Aber nur bei Oracle oder Fyracle. Ist aber kein Standrad
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Simple SQL-Abfrage mit Fremdschlüssel

  Alt 29. Mai 2009, 11:09
Danke!

Gruß
K-H
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:07 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