Announcement

Collapse
No announcement yet.

Datensätze aus eine Tabelle1 und nicht Tabelle2

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensätze aus eine Tabelle1 und nicht Tabelle2

    Hi,

    Ich habe ein kleines Problem:
    Ich möchte ein Liste bekommen von alle Datensätze aus Tabelle1 aber nur wenn die Primärschlüssel nicht in ein Feld von Tabelle2 eingetragen ist. Beispiel

    Tabelle1
    ID Name
    0 Test1
    1 Test2
    3 Test3

    Tabelle2
    ID IDTabelle1
    0 1
    1 3

    sollte nur die 2te Datensatz heraus kommen.

    Ich dachte folgende SQL Anweisung wäre OK aber funzt nicht:
    SELECT DISTINCT Tabelle1.Name FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID NOT LIKE Tabelle2.IDTabelle1

    Kann mir da jemand helfen?

  • #2
    Wenn ichs richtig verstanden habe:

    SELECT Tabelle1.* FROM Tabelle1 LEFT OUTER JOIN Tabelle2 ON Tabelle1.IDFeld = Tabelle2.IDFeld
    WHERE Tabelle2.IDFeld IS NUL

    Comment


    • #3
      @Bernhard Danke für de schnelle Antwort.
      Leider geht nicht! Ich versuche es anders zu erklären.

      Ich habe eine Tabelle Bestellungen mit Bestell-Nr (Primär-Key)auf eine Seite.
      Ich habe ein zweite Tabelle GeldEingang wo alle GeldEingänge eingetragen werden. Im Verwendungszweck ist der BestellNr eingetragen.

      Jetzt will ich eine Abfrage machen die mir alle nicht bezahlte Bestellungen anzeigt. Also ich will alle Datensätze aus Tabelle Bestellungen dessen BestellNr in der Tabelle GeldEingang <b>nicht</b> erschein

      Comment


      • #4
        Ich glaube ich hab's

        SELECT DISTINCT BestellNr FROM Bestellungen WHERE BestellNr NOT IN (SELECT BestellNr FROM GeldEingang);

        so scheint zu funktioniere

        Comment


        • #5
          Wobei Du auf das DISTINCT verzichten kannst, wenn Dein Primärschlüssel BestellNr ist. Dann kann jede BestellNr doch nur einmal vorkommen.

          Grüße Joche

          Comment


          • #6
            @Alois

            Dann sollte obiger Outer-Join funktionieren:

            SELECT BestellNr FROM Bestellungen LEFT OUTER JOIN GeldEingang ON (Bestellung.BestellNr = GeldEingang.BestellNr) where GeldEingang.BestellNr IS NULL

            Deine Subquery-Lösung könnte bei größeren Datenmengen u.U. sehr langsam werden, wenn der SQL-Optimierer der Datenbank eine ungünstige Zugriffsstrategie fährt

            Comment


            • #7
              @Bernhard: Verständnisfrage: Die SubQuery-Lösung sollte doch nur in dem Fall langsamer sein, wenn BestellNr nicht in beiden Tabellen der Primärindex ist, respektive in einer der Tabellen ein zusammengesetzer Primärindex verwendet wird. Ansonsten sollten beide Versionen keinen Unterschied in der Ausführungsgeschwindigkeit ergeben. Oder übersehe ich da etwas?

              Grüße Joche

              Comment


              • #8
                Ein NOT IN bedeutet u.U. einen
                Fulltable scan der Sub-Query.
                Evt. ist ein NOT EXISTS hilfreich.
                Aber der Outer-Join ist die beste Lösung.

                Gruß Joachi

                Comment

                Working...
                X