none
SQL Abfrage mit Vergleich von 2 Werten RRS feed

  • Frage

  • Hallo,

    ich möchte eine SQL Abfrage machen für 2 verkettete Werte ob dieser Wert, der in Tabelle 1 enthalten ist auch in Tabelle 2 entahlten ist.

    select t1.Artikel, t1.Standort
    from t1
    where not EXISTS
         ( select concat (t2.Artikel, t2.Standort)
         from t2
         where (t1.Artikel < '10000000' and t1.Artikel = '1234567')

    Leider führt die Abfrage nicht zu dem gewünschten Ergebnis, hat hier jemand einen Tip was ich falsch mache?

    CYA_D0c

    Donnerstag, 27. Juli 2017 09:40

Antworten

Alle Antworten

  • Hi,

    kannst Du bitte die CREATE TABLE Statements für beide Tabellen posten? Dazu bitte Beispieldaten als INSERT INTO Statements und passend zu den Beispieldaten das gewünschte Ergebnis in Tabellenform.

    Dein Abfragekriterium

    select concat( t2.Artikel, t2.Standort )
    from   t2
    where ( t1.Artikel < '10000000' and t1.Artikel = '1234567' )

    wiederspricht sich natürlich irgendwie. "Artikel" kann natürlich kleiner als der String "1000000000" sein aber da Du dann auch gleich auf "1234567" einschränkst, werden dann maximal die Datensätze geliefert, bei denen "Artikel" eben "1234567" ist.

    Zudem fragst Du in der Unterabfrage t2 ab, die WHERE Klausel geht aber auf t1.

    Alles in allem also leider ziemlich falsch. Daher bitte wie oben geschrieben die fehlenden Informationen posten. Dann schauen wir weiter.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 27. Juli 2017 09:44
    Moderator
  • Hi,

    falls Du die Werte aus Tabelle1 haben willst, die identisch in Tabelle2 vorkommen, kannst Du bspw. folgendes SQL Statement verwenden.

    SELECT t1.Artikel,
           t1.Standort
    FROM   t1
    WHERE  CONCAT( t1.Artikel, t1.Standort ) IN
           (
            SELECT CONCAT( t2.Artikel, t2.Standort )
            FROM   t2
           )

    Wenn Du das Gegenteil suchst (also nur das aus Tabelle1 willst, was nicht in Tabelle2 vorkommt), schreib noch ein NOT vor IN, also NOT IN.

    Falls Du lieber mit ohne CONCAT, dafür dann aber mit EXISTS bzw. NOT EXISTS arbeiten willst:

    SELECT t1.Artikel,
           t1.Standort
    FROM   t1
    WHERE  NOT EXISTS
           (
            SELECT t2.Artikel,
                   t2.Standort
            FROM   t2
            WHERE  t2.Artikel  = t1.Artikel
            AND    t2.Standort = t1.Standort
           )

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 27. Juli 2017 09:55
    Moderator
  • Also mit Exists prüfst du die Existenz oder Nichtexisitenz in der anderen Tabelle.
    Hier fehlt aber die Beziehung zu Tabelle 2:

    where not EXISTS ( select * from t2
    where t1.Artikel = t2.Artikel and t1.Standort = T2.Standort

    ) and (t1.Artikel < '10000000' and t1.Artikel = '1234567'

    Somit wird der Artikel 1234567 gesucht, wenn er nicht in T2 mit dem Standort vorhanden ist.

    Donnerstag, 27. Juli 2017 10:34
  • Danke Stefan Falz, das sieht ziemlich gut aus.

    Wie kann ich denn noch die Bedigung

    t1.Artikel < '10000000'

    mit unterbringen in der Abfrage?

    Donnerstag, 27. Juli 2017 10:47
  • Hi,

    einfach mit AND hintendran hängen, also bspw.:

    SELECT t1.Artikel,
           t1.Standort
    FROM   t1
    WHERE  NOT EXISTS
           (
            SELECT t2.Artikel,
                   t2.Standort
            FROM   t2
            WHERE  t2.Artikel  = t1.Artikel
            AND    t2.Standort = t1.Standort
           )
    AND    t1.Artikel < '100000000'
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 27. Juli 2017 11:11
    Moderator