SQL Feldwert aus anderer Tabelle in Select

Harry2k

Ensign
Registriert
Jan. 2017
Beiträge
151
Hallo, ich fasse erstmal mein Problem zusammen:

Ich habe eine Tabelle "Kunden" und eine Tabelle "Angebote" im Frontend wird nun ein Angebot der Kundentabelle zugeordnet mittels Eintrag der "Kundenstandortnummer" die ebenfalls als Feld in der Kundentabelle existiert. Real ist aber das Angebot immer dem Kunden.Kundenummer zugeordnet und nicht der Kundenstandortnummer zugeordnet.

Nun will ich alle Angebote mit der Kundenstandortnummer die das "Besuchsdatum" <=1 aufweist.

Kann ich ungefähr so etwas machen:

Select Angebote.Kundenummer,Angebote.Angebotsnummer, Angebote.Kundenstandortnummer, (Select Kunden.Besuchsdatum from Kunden
where Kunden.Kundenstandortnummer = Angebote.Kundenstandortnummer) as Besuchsdatum, Kunden.Kundennummer

from Angebote
INNER JOIN Kunden ON Kunden.Kundennummer = Angebote.Kundenummer

order by Kunden.Besuchsdatum

Die Tabellen sind mit inner join verzahnt ( Angebote.Kundennummer mit Kunden.Kundennummer)

Bekomme als Ergebnis immer 0 (wenn ich das Kunden.Besuchsdatum als Where Bedingung nehme) da die Kundenstandortnummer nicht befüllt ist, oder eben die Angebote aber ohne befülltes Besuchsdatum, da das Angebot in der Kundentabelle nur auf den Kunden.Kundenummer läuft.
Ich habe die Nummer ja in der Angebotstabelle und will eben den Wert aus einem anderen "Kundendatensatz" eben dem Kundenstandort darstellen

Blöd zu beschreiben hat jemand einen Denkanstoß? Ich denke das Select als Feldwert wird nicht gefüllt, da das Angebot ja auf den Kunden läuft und der betreffende Wert nur im Kundenstandort befüllt ist oder habe ich noch weitere Optionen?

Gruß

Harry2K
 
Zuletzt bearbeitet:
Harry2k schrieb:
Die Tabellen sind mit inner join verzahnt ( Angebote.Kundennummer mit Kunden.Kundennummer)
Wieso hast du in deinem Select dann keinen inner join stehen sondern einen Subselect?
 
Stell doch bitte kurz zwei Tabellen zusammen, mit den relevanten Feldern und den Schlüsseln. Aus Text heraus finde ich sowas immer extrem mühselig.
 
Tabelle Kunden:

Kunden.id,Kunden.Kundennummer, Kunden.Kundenstandortnummer, Kunden.Besuchsdatum

(Kunden.Besuchsdatum nur befüllt wenn Kundenstandortnummer-Datensätzen befüllt)

Tabelle Angebote:

Angebote.id, Angebote.Kundennummer, Angebote.Kundenstandortnummer, Angebote.Angebotsnummer

(Die Angebote haben als Schlüssel die Angebote.Kundennummer ich möchte aber den Wert des Kunden.Besuchsdatum der Kundenstandortnummer die ich ja ebenfalls in der Angebotstabelle unter dem jeweiligen Datensatz habe, daher die Idee mit dem subselect)
 
Ehrlich gesagt fällt es mir sehr schwer zu verstehen, was du genau willst. Versuch das doch bitte nochmal.
Abgesehen davon ist mir jetzt nicht klar, was die Fremdschlüssel sind. Und was hat die Kundenstandortnummer mit dem ganzen zu tun? Du willst den Wert doch einfach nur auslesen, völlig egal was da steht, oder verstehe ich das falsch?
 
Mal als Beispiel: ein Angebot läuft auf die 12345 , der Besuchstermin ist aber unter derm Kundendatensatz mit der Kundenstandortnummer 12345a abgelegt. Daher ist der Schlüssel mir der id des Datensatzes mit der Kundennummer verknüpft, den Wert den ich will kommt aber von einem Datensatz mit der id der Kundenstandortnummer die ich ebenfalls in den Angeboten mitgeliefert bekomme bzw. die Kundenstandortnummer an sich (ist eben dämlich das das betreffende Angebot nicht gleich zum Datensatz der Kundenstandortnummer angelegt wurde) Primär sind die IDs, Fremdschlüssel eben die Nummern
 
Ich verstehe immer noch nur Bahnhof.
Du hast die Angebotsnummer 12345 gegeben. Diese Nummer steht (in etwas anderem Format) als 12345a im Feld Kundenstandortnummer der Kundentabelle. Aus der Kundentabelle willst du dann das Besuchsdatum auslesen.
Ist das so korrekt? Falls ja, ist das Format immer genau so? oder können es auch mehr Buchstaben sein? Sind es immer fünf Zeichen für die Kundennummer?
Wenn die Inhalte nicht absolut identisch sind und es auch kein entsprechendes einheitliches Format gibt, wird das rein mit SQL vielleicht nicht funktionieren.
 
ahh sorry meinte ein Angebot läuft auf die Kundennummer 12345, habs editiert, der subselect war ein versuch einen wert aus einem Datensatz der Kundenstandortnummer = den Besuchstermin anzuzeigen obwohl das Angebot an sich über die Kundennummer verknüpft ist

In der where Klausel kann ich das ganze nicht abgreifen weil ich ja eigentlich nur die Zuordnung zur Kundennummer habe, daher das Feld ist leer
 
Keine Ahnung, ob ich grad einfach nur dumm bin, aber ich raff es nicht. Ich hab immer noch nicht verstanden, was du willst. Mit jedem Satz, den du schreibst, wirfst du bei mir nur noch mehr Fragen auf.
 
Du hast eine Kunden-Tabelle in der nicht nur "echte Kunden" sondern auch alle jeweiligen Rechnungs-/Lieferadressen (Standorte) dieser Kunden stehen?
Und im Angebot wird nicht der echte Kunde, sondern eine Rechnung-/Lieferadresse hinterlegt? (Oder halt anders herum, bleibt das gleiche.)
Verstehe ich das so richtig?

Wenn ja, woher weißt du, zum welchen echten Kunden die Rechnungs-/Lieferadresse gehört?

Wenn ich dich so richtig verstehe, musst du aus dem Angebot den echten/flaschen Kunden joinen (Kunde1) und dann alle anderen zugehörigen flaschen/echten Kunden auf Kunde1 joinen.
Das Ganze noch passend in der Where-Clause filtern.
 
SELECT Angebote.Kundennummer, Angebote.Angebotsnummer, Angebote.Kundenstandortnummer, Kunden.Besuchsdatum
FROM Angebote
JOIN Kunden
ON Angebote.Kundennummer = Kunden.Kundennummer
WHERE Besuchsdatum >= 1
ORDER BY Kunden.Besuchsdatum

Was ist damit?

AW4 schrieb:
Du hast eine Kunden-Tabelle in der nicht nur "echte Kunden" sondern auch alle jeweiligen Rechnungs-/Lieferadressen (Standorte) dieser Kunden stehen?
Das würde so einiges erklären...
 
ich teste morgen nochmal ein paar wege, aber erstmal danke für die Zeit die "Nuss zu knacken"
 
AW4 schrieb:
Du hast eine Kunden-Tabelle in der nicht nur "echte Kunden" sondern auch alle jeweiligen Rechnungs-/Lieferadressen (Standorte) dieser Kunden stehen?
Sö hört es sich fast an und das erklärt auch weshalb es mit dem Join nicht funktionieren soll... man könnte es vielleicht über einen zweiten Join lösen aber eigentlich gehört sich da das Modell bereinigt.

edit: wobei... mach doch den JOIN einfach über die Kundenstandortnummer wenn dass das zusammengehörende Kriterium ist.
 
... Du hast eine Kunden-Tabelle in der nicht nur "echte Kunden" sondern auch alle jeweiligen Rechnungs-/Lieferadressen (Standorte) dieser Kunden stehen?... genau das ist mein Problem, ich weiß eben nicht wie ich den wert( Kunden.Besuchsdatum) aus der gleichen Tabelle abgreifen kann aber unter anderer id als das eigentliche Angebot läuft, als Brücke habe ich nur die Angebote.Kundenstandortnummer
 
wie genau würde die syntax dann aussehen? Steh aufn Schlauch :)
JOIN Kunden ON Angebote.Kundennummer = Kunden.Kundennummer
JOIN Kunden ON Angebote.Kundenstandortnummer = Kunden.Kundenstandortnummer

Woher weiß sql den dann was ich aus welchem Datensatz will ??? Im Grunde will ich ja nur die Kunden.Besuchstermine der Datensätze mit "anderer" ID darstellen im Select, daher auch die idee mit dem subselect
 
Harry2k schrieb:
... Du hast eine Kunden-Tabelle in der nicht nur "echte Kunden" sondern auch alle jeweiligen Rechnungs-/Lieferadressen (Standorte) dieser Kunden stehen?... genau das ist mein Problem, ich weiß eben nicht wie ich den wert( Kunden.Besuchsdatum) aus der gleichen Tabelle abgreifen kann aber unter anderer id als das eigentliche Angebot läuft, als Brücke habe ich nur die Angebote.Kundenstandortnummer

Einfach zwei Mal die Kunden-Tabelle joinen, mit jeweils unterschiedlichem Alias.
Das erste Mal anhand des im Angebot hinterlegen Schlüssels und dann nochmal anhand des kriteriums, die die ganzen Standorte mit dem echten Kunden (oder anders rum) verbindet.

SQL:
select *
from Angebot
inner join Kunde AngebotsKunde on (AngebotsKunde.Kundenschlüssel = Angebot.Kundenschlüssel)
inner join Kunde Standorte on (Standorte.Verknüpfung = AngebotsKunde.Verknüpfung)
where Standorte.Kundenstandort = Angebot.Standort
  and Standorte.Besuchsdatum <= 1
 
Harry2k schrieb:
JOIN Kunden ON Angebote.Kundenstandortnummer = Kunden.Kundenstandortnummer
So. Außer natürlich du brauchst auch noch die Daten die mit der Kundennummer verknüpft sind anstelle mit der Standortnummer, dann wirds leicht aufwendiger mit 2 JOINs...

JOIN Kunden as K ON Angebote.Kundennummer = K.Kundennummer
JOIN Kunden as S ON Angebote.Kundenstandortnummer = S.Kundenstandortnummer

Als K.* hast du damnn die Flder für die Kundenummer und als S.* hast du die Felder die mit dem Standort verknüpft sind.
 
Zurück
Oben