Andrea: SQL-Frage (NOT IN...)

Hallöchen zusammen,

ich habe folgende zwei Datenbanktabellen:

TabelleA: Spalten-> a_ID, a_spalte1, a_spalte2
TabelleB: Spalten-> b_ID, b_spalte1, b_spalte2

Ich möchte nun mit einer SQL Abfrage alle Einträge aus TabelleB haben, wo sich ein Eintrag aus b_spalte1 NICHT in der Spalte a_ID der TabelleA befindet.

Dazu hatte ich folgendes SQL angedacht:

SELECT b.*
FROM TabelleA a, TabelleB b,
WHERE b.b_spalte1
NOT IN a.a_ID;

Das funktioniert aber leider nicht. Bei dem "NOT IN" bin ich mir aber nicht so sicher. Könnte es vielleicht daran liegen?

Für Eure Hilfe danke ich im Voraus.
Liebe Grüße

Andrea

  1. SELECT b.*
    FROM TabelleA a, TabelleB b,
    WHERE b.b_spalte1
    NOT IN a.a_ID;

    Andrea

    Hi Andrea, ich bin mir jetzt zwar nicht mehr ganz sicher, aber gehört da nicht der "HAVING" Befehl anstatt dem NOT IN hin?

    Andi

  2. Hi,

    SELECT b.*
    FROM TabelleA a, TabelleB b,
    WHERE b.b_spalte1
    NOT IN a.a_ID;

    Das ist etwas komplizierter gedacht, als es eigentlich sein sollte:
    Gib mir alle Spalten
    aus TabelleB
    wo die spalte1 nicht in (gib mir alle spaltenids aus tabellea) ist.

    --> und genau so in SQL:
    SELECT b.*
    FROM TabelleB
    WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);

    Ach ja: Bitte nicht SELECT *

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi Rouven

      danke für die schnelle Antwort.
      Das funktioniert leider noch nicht ganz.

      Das ist etwas komplizierter gedacht, als es eigentlich sein sollte:
      Gib mir alle Spalten
      aus TabelleB
      wo die spalte1 nicht in (gib mir alle spaltenids aus tabellea) ist.

      --> und genau so in SQL:
      SELECT b.*
      FROM TabelleB
      WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);

      Jedes Ergebnis kommt so oft wie es Einträge in TabelleA gibt.

      Beispiel: Die TabelleA hat 100 Einträge.
      Falls "b_spalte1" nicht in "a_ID" ist, (Damit wäre es ein Ergebnis der Abfrage) erscheint dieser Eintrag 100 mal.

      Wie kann man das noch verfeinern?

      Liebe Grüße
      Andrea

      1. Hi Rouven

        --> und genau so in SQL:
        SELECT b.*
        FROM TabelleB
        WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);

        Habe den Fehler gefunden. Im FROM hatte ich beide Tabellen angegeben. Da muss natürlich nur TabelleB stehen.

        Vielen Dank nochmal
        Liebe Grüße

        Andrea

        1. Hallöchen,

          sollte es trotzdem mal dazu kommen, dass du mehrere gleiche Sätze erhältst, dann hilft dir auch SELECT DISTINCT...

          MfG
          Rouven

          --
          -------------------
          ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  3. n'abend,

    SELECT b.*
    FROM TabelleA a, TabelleB b,
    WHERE b.b_spalte1
    NOT IN a.a_ID;

    je nach dem mit welchem SQL du arbeites, kannst du das auch per subSelect lösen... stehen subselects nicht zur verfügung willst du vielleicht einen LEFT JOIN machen und dir dann die zeilen ausgeben, deren spalte xyz NULL ist :)
    (letzteres verwende ich auf mysql4.0 um datensätze zu finden, die keinen "eigentümer" mehr haben...)

    weiterhin schönen abend...

    --
    wer braucht schon großbuchstaben?
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|