Inner Join richtig einsetzten zur Select-Abfrage

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Inner Join richtig einsetzten zur Select-Abfrage

    Ich möchte aus drei verschiedenen Tabellen folgendes auslesen: File_Main.Object_Name, File_Object_BankConnections.IBAN (FileID=80000)

    Die Tabellen die zur Verfügung stehen
    -- File_Main
    -- File_Object_Main
    -- File_Object_BankConnections

    Wie verbinde ich die Tabellen um an das richtige Ergebnis zu kommen?
    Bilder
    • Untitled.png

      36,01 kB, 909×680, 114 mal angesehen
    zunächst mal musste in der Datenbank Beziehungen zwischen den Tabellen einrichten, die sie geeignet verknüpfen.

    Was bedeutet im Bildle diese Linie mit dem Karo drauf?
    Höchstwahrscheinlich eine Beziehung, aber ich glaub von ungeeigneter Art.

    Ich denke, du musst erst noch die relationale Grundidee als solche verstehen.
    Das ist die Grundlage dafür, dass du ein sinnvolles relationales Datenmodell konzipieren kannst.
    Und das ist natürlich wiederum die Vorraussetzung, sinnvolle Inner-Join-Abfragen zu formulieren.

    Deine Abfrage enthält übrigens keinen InnerJoin, sondern einen CrossJoin, wenn du mal hinschaust.
    Ich weiss nicht, was ein CrossJoin macht, aber ich vermute: Nicht, das was du dir wünschst.
    Wir können dir leider ohne zu wissen welche Tabelle wie mit den anderen zusammen hängt nicht helfen.
    Aktuell weiß ich nicht einmal was die konkrete Frage ist.
    Du musst dir die drei Tabellen (die denke ich mal nicht von dir sind) ansehen und sagen, welche von denen denn nun die führende ist und welche daran quasi "angehangen" werden sollen.
    Dann musst du wissen, welcher Inhalt immer in der übergeordneten und der zu joinenden Tabelle identisch ist. Dieser gehört in das Join Statement.

    @ErfinderDesRades Das Karo in dem Screenshot ist bei MSSQL ein Innerjoin.
    Man kann in der grafischen Oberfläche per Drag&Drop die Felder die für den Join relevant sind verheiraten und er baut dir das Statement auf. Tickt ähnlich wie Access.

    Wenn die Datenbank nicht von dir ist, frag doch einfach den Macher welche Tabelle wie mit den anderen zusammen hängt.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Der CrossJoin kommt daher, dass die BankConnections-Tabelle keine Relationen zum Rest aufweist.
    Letztendlich mutiert er alle gewünschten Records der Tabelle (in dem Fall alle IBANs) für alle Results des InnerJoin.
    Das kann recht länglich werden.

    Spekulation:
    Beide BankingConnectionIDs in File_Main (oder auch nur eine davon) mit der ID in File_Object_BankingConnection verbinden.
    Dann erzeugt der Generator den entsprechenden InnerJoin statt einem ungewünschten CrossJoin.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --