Benutzer mit den meisten Antworten
SQL Abfrage mit Vergleich von 2 Werten

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
Antworten
-
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 31. Juli 2017 06:14
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 8. August 2017 12:18
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
- Bearbeitet Stefan FalzModerator Donnerstag, 27. Juli 2017 09:48
-
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
- Bearbeitet Stefan FalzModerator Donnerstag, 27. Juli 2017 10:08
-
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.
-
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 31. Juli 2017 06:14
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 8. August 2017 12:18