none
Abfrage mit Join RRS feed

  • Frage

  • Ich habe ein Abfrage mit Unterabfrage als Join eingebunden

    Select ... From ...
    Join (Select status,VNr,datum From TlnStat1 Join Tln_Status On Status=id_tstat1) t2 On t2.VNr=id_tlnmz

    Das funktioniert. Nun möchte ich aber in der Unterabfrage jeweils nur den aktuellsten Datensatz ermitteln:

    Select ... From ...
    Join (Select Top 1 status,VNr,datum From TlnStat1 Join Tln_Status On Status=id_tstat1 Order By datum DESC) t2 On t2.VNr=id_tlnmz

    Das funktioniert auch aber nur wenn die Unterabfrage (ohne Top 1) mehr als 1 Datensatz ergibt. Oftmals ergibt diese aber nur 1 Datensatz und dann kommt NULL zurück.

    Was ist da falsch?


    Mittelung vom Forum

    Freitag, 18. Januar 2013 13:58

Alle Antworten

  • Hallo Uwe,
    dein Null soll erscheinen wenn in  dem Teil nach dem  join (select top 1..) keine Treffer kommen. Abhängig in welcher Spalte deine NULL auftaucht.
    Schau mal ob du das join durch ein Left Join ersetzten kannst.

    Grüße Alexander

    Freitag, 18. Januar 2013 15:25
  • Hallo Alexander,

    genau so hätte ich es erwartet. Aber in Realität ist es so wie beschrieben: Bei nur einem Datensatz als Resultat gibt die Unterabfrage keinen Wert zurück. Das Left Join würde nur verhindern, dass damit die Gesamtausgabe NULL bringt.

    Uwe


    Mittelung vom Forum

    Freitag, 18. Januar 2013 15:34
  • Uwe, es ist zu spät, sorry ja klar. Dann würde ich meinen da ist nichts. Prüfe den Eintrag der 1. Tabelle und suche den Wert
    id_tlnmz zunächst in der Tabelle  TlnStat1. Den soll es nicht geben.
    Aber: auf welcher Spalte/Tabelle kommt denn überhaupt die NULL? von der Tabelle TlnStat1?
    der sollte das zeigen: select t0.* from deinerTabelleohneName t0 left join TlnStat1 t1 on t0.id_tlnmz = t1.VNr where t1.vnr is null.
    Wobei: ein paar Aliase würden dem lesenden trotzdem helfen. Hat den Vorteil das Du beim erweitern selten die Meldung erhältst das die Spalte unklar ist die gemeint ist wenn sich die Definition mal ändert, was in der Realität durchaus passieren kann.

    Grüße Alexander

    Freitag, 18. Januar 2013 17:08
  • Hallo Uwe,

    bitte poste doch mal die Struktur der verwendeten Tabellen sowie ein paar Beispieldaten.
    Ich verstehe noch nicht so ganz, warum Du ein SubSelect als JOIN verwendest.


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de
    SQL Server Blog (german only)

    Dienstag, 22. Januar 2013 07:00