SQL mit 2 IDs aus versch Tabellen

mt82

Grünschnabel
Hallo Datenbank Freunde,
Ich versuche mit TSQL drei Tabellen miteinander zu verbinden.

In der Tabelle 1 werden Positionssätze mit einer ID abgespeichert.
In der Tabelle 2 werden Kopfsätze mit einer anderen ID abgespeichert.
Tabelle 1 und 2 können mit einem Keyfeld verbunden werden, wo die Beziehung n:1 ist.
Ich möchte gerne folgendes Ergebnis: ID der Tabelle 1 / Name dieser ID / ID der zugehörigen Tabelle 2 / Name dieser zweiten ID.
Die Namen der ID befinden sich alle in Tabelle 3.

Ich hoffe, das hilft zum Verständnis.
1676292271573.png

Ich habe es schon mit JOIN probiert, aber das liefert nicht das gewünschte Ergebnis.

Danke für Eure Unterstützung
 
Zuletzt bearbeitet:
Kein Wort verstanden.
Tabellenstruktur aller 3 Tabellen, bitte, sowie (eventuell vorhanden?) Beispieldaten aus allen 3 Tabellen.
Sowie "Das habe ich, das hätte ich gerne"
Klingt simpel genug....

EDIT: Vermutung: Klingt schwer nach EAV (Entity Attribute-Value) AntiPattern, was pfui bäh ist
 
Zuletzt bearbeitet:
Sieht komisch aus. Geht ein wenig im Kreis herum.
Ja, Joins sind schon richtig. Ok, ich kenne TSQL nicht.
Zeig doch mal dein Join, der nicht funktioniert.
SQL:
-- Namen angepasst, wie sie in einer Datenbank sein sollten
select
    a1.id, a1.name, a2.id, a2.name
from 
    stuecklistenkopf k,
    stuecklistenposition p,
    artickelstamm a1,
    artickelstamm a2,
where 
    p.artickelstamm_id = a1.artickelstamm_id
    and p.id = k.stuecklisten_id
    and k.artickelstamm_id = a2.artickelstamm_id
Achja, ich hoffe deine Namensgebungen sind anders. Nenne niemals ein Feld mit "name", keine Umlaute und keine Leerzeichen oder Bindestriche.
 
OK, mal als Empfehlung: Bei solchen Sachen immer vom "Parent" zum "Child" hangeln.
In deinem Fall ist Tabelle3 das Parent zum Child Tabelle2, und Tabelle2 ist das Parent zum Child Tabelle1, wobei noch hinzukommt, dass Tabelle3 auch Parent zu Child Tabelle1 ist (Dreiecksbeziehung).

Ist einfach (und ich hab "Abgekürzt". Keine Lust diese ewig langen Tabellen-/Spaltennamen zu schreiben)
Im Gegensatz zu Yaslaw mit JOINS
Ggfs. LEFT JOIN anstatt INNER JOIN
SQL:
SELECT
    SLP.AS_ID, AS1.Name, SLK.AS_ID, AS2.Name
FROM Tabelle1 AS SLP
INNER JOIN Tabelle2 AS SLK ON SLK.ID=SLP.SL_ID
INNER JOIN Tabelle3 As AS1 ON AS1.ID=SLP.AS_ID
INNER JOIN Tabelle3 AS AS2 ON AS2.ID=SLK.AS_ID
TSQL --> MS SQL-Server
Sieht komisch aus. Geht ein wenig im Kreis herum.
Nicht wirklich.
Ist "Standard" für das Szenario. Hab ich bei mir in der Firma auch, mit dem Unterschied, dass wir keine StüLi-Kopf-Tabelle haben, sondern (redundant) das "Fertigteil" als eigene Spalte in StüLi-Pos haben
In seinem Fall würde es sinngemäss bei uns so aussehen

StüLiPosArtikel_ID - Fertigteil_Artikel_ID
4711 - 4700
4712 - 4700

Vorteil: Du sparst dir eine Tabelle (und damit dieses komische "Dreieck"), und der Speicher-Aufwand ist nicht wirklich grösser
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück