Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 10 von 10
  1. #1
    Aufsteiger
    Registriert seit
    03.04.2007
    Beiträge
    69

    Standard Prüfen, ob bestimmter Datensatz vorhanden ist

    Guten Morgen :-)

    Ich habe eine Tabelle tblArtikel, in dieser sind alle angelegten Artikel enthalten.
    Dann gibt es eine weitere Tabelle (tblLager), in dieser sind die Lagerplätze den Artikeln zugeordnet. Eigentlich sollte es in dieser Tabelle zu jedem Artikel einen Standardplatz (Lagerplatz = 1) geben.

    Dies würde ich aber gerne überprüfen. Daher würde ich gerne für alle Artikelnummern prüfen, ob in der Tabelle tblLager der Lagerplatz = 1 vorhanden ist. Evtl. können zu Artikelnummern auch zusätzlich noch andere Lagerplatznummern existieren.

    Dies habe ich zwar versucht, liefert aber keine Ergebnisse
    Code:
    SELECT DISTINCT nummer FROM tblArtikel
      WHERE NOT EXISTS (SELECT nummer FROM tblLager
                    WHERE lagerplatz = 1 AND nummer = '1234');

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.227

    Standard

    select tblArtikel.nummer from tblArtikel, tblLager where tblArtikel.nummer=tblLager.nummer and tblLager.lagerplatz!=1
    Christian

  3. #3
    Aufsteiger
    Registriert seit
    03.04.2007
    Beiträge
    69

    Standard

    Leider nicht :-(
    Es werden jetzt auch Datensätze, die lagerplatz = 1 haben angezeigt.

  4. #4
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.282

    Standard

    Zitat Zitat von Bonaqua Beitrag anzeigen
    Leider nicht :-(
    Es werden jetzt auch Datensätze, die lagerplatz = 1 haben angezeigt.
    Geht es denn hier um Existenzprüfung oder darum, welches Flag gesetzt ist?
    Oder anders, gibt es Constraints, die da irgendwas sicherstellen, wenn ja welche?
    Gruß, defo

  5. #5
    Aufsteiger
    Registriert seit
    03.04.2007
    Beiträge
    69

    Standard

    Es geht um Existenzprüfung. Also ob zu jeder Nummer der Lagerplatz 1 in der Tabelle tblLager vorhanden ist.

    Wenn es eben zusätzlich gehen würde, wäre es praktisch, wenn gleich geprüft werden könnte, ob alle Nummern, die in tblArtikel enthalten sind, auch in tblLager sind.

  6. #6
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.282

    Standard

    So könnte es gehen, es werden alle Artikelnummern ausgegeben, die nur in tblArtikel vorhanden sind oder auch in Lager, aber ohne 1

    Code SQL:
    SELECT a.nummer
      FROM tblArtikel a
      LEFT JOIN (SELECT nummer FROM tblLager WHERE lagerplatz = 1) l
        ON a.nummer = l.nummer
       AND l.nummer IS NULL
    Gruß, defo

  7. #7
    Stammgast
    Registriert seit
    27.08.2007
    Beiträge
    562

    Standard

    Hallo,

    warum die zweite WHERE Bedingung im Subselect?
    Geht es so nicht?

    Code SQL:
    SELECT DISTINCT nummer FROM tblArtikel
      WHERE NOT EXISTS (SELECT nummer FROM tblLager
                    WHERE lagerplatz = 1);

    Der MSSQL Server könnte auch sowas, was aber inhaltlich defos Lösung entspricht:


    Code SQL:
    SELECT tblArtikel.nummer FROM tblArtikel
      LEFT JOIN tblLager ON tblArtikel.Nummer = tblLager.Nummer AND tblLager.lagerplatz = 1
    WHERE tblLager.Nummer IS NULL


    Grüße
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.

  8. #8
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.824

    Standard

    Evtl. können zu Artikelnummern auch zusätzlich noch andere Lagerplatznummern existieren.
    MIch würde nicht wundern wenn Nummer in den beiden Tabellen was unterschiedliches ist und man die gar nicht verknüpfen sollte was wir die ganze Zeit versuchen

  9. #9
    Aufsteiger
    Registriert seit
    03.04.2007
    Beiträge
    69

    Standard

    Zitat Zitat von tinof Beitrag anzeigen
    Code SQL:
    SELECT tblArtikel.nummer FROM tblArtikel
      LEFT JOIN tblLager ON tblArtikel.Nummer = tblLager.Nummer AND tblLager.lagerplatz = 1
    WHERE tblLager.Nummer IS NULL


    Grüße
    Tino
    Danke Tino! Das war die Lösung!

  10. #10
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.282

    Standard

    @tinof
    Klar geht es mit der not-exists-Variante mit einer Bedingung weniger.
    Meine Erfahrung ist, das not Exists kein Rennpferd ist, und zwar mehr oder weniger egal, welche DB.
    Ich verwende daher eigentlich immer einen OUTER JOIN, um sowas abzufragen.
    Durch die Unterbedingung xyFlag=1 ist die Outer Join Variante wahrscheinlich auch nicht die schnellste, aber warten wir erstmal, ob überhaupt was gescheites rauskommt.

    Beide Varianten sollten allerdings nicht nur in MSSQL, sondern in allen gängigen Systemen funktionieren und ein richtiges Ergebnis liefern, außer ..
    @Ralf Jansen
    Das wäre sehr amüsant.
    Gruß, defo

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •