[SQL] Abfrage über mehrere Tabellen

fliegenkiller

Lt. Junior Grade
Registriert
März 2005
Beiträge
387
Hallo,
Ich habe folgendes Problem:
In meiner Datenbank habe ich zwei Tabellen (Artikel, Preise). Ich möchte nun eine Abfrage starten, mitder ich alle Artikelnummern auslesen kann, die in der Tabelle Artikel vorkommen, nicht aber in der Tabelle Preise.

Ich habe mir folgendes überlegt:
mit:
Code:
SELECT*FROM Artikel, Preise WHERE Artikel.ArtNr=Preise.ArtNr
Werden ja alle Datensätze ausgelesen, die in beiden Tabellen vorkommen. Kann ich jetzt die Abfrage so umkehrer, dass sie mir das gewünschte Resultat gibt?
Code:
SELECT*FROM Artikel, Preise WHERE Artikel.ArtNr != Preise.ArtNr

Kann mier jemand helfen? vielen dank für jede Antwort

(Ich weiss, ich sollte aus beiden Tabellen eine machen. Dies geht aber aus diversen Gründen nicht.)

EDIT: Vielleicht gibt es etwas mit HAVING oder NOT HAVING
 
Zuletzt bearbeitet:
Hallo

SELECT Artikel.ArtNr,Preise.Preis FROM Artikel
LEFT JOIN Preise ON (Artikel.ArtNr = Preise.ArtNr);


um die geaue abfrage zu schreiben, währe die Dantenbank hilfreich;)
 
Da gibt es mal die MySQL Datenbank für das Web. Die andere weiss ich nicht genau. Es handelt sich um SAP.
Ich habe aber gelesen im meinem Buch über SQL, dass es einen Basis-SQL-Standart gibt, der ein allen Datenbanken unterstützt wird. (Mit kleinen abweichungen und erweiterungen)
 
MySQL

SELECT Preise.ArtNr
FROM Preise
Left OUTER JOIN Artikel
ON Artikel.ArtNr <> Preise.ArtNr

zum_Nachlesen ;)

Bei der SAP DB würd ich sagen ist es Oracle oder MSSql (ok, ich weis es nicht sicher, noch nie was mit SAP zu tun gehabt :D )
 
Zuletzt bearbeitet:
So viel ich weiss ist SAP Oracle basiert. Ich habe jedoch einen Artikel gelesen, dass SAP die Technick an MySQL weitergibt. Das mit den JOIN Syntax habe ich auch schon gedacht, jedoch komme ich damit nicht so ganz klar.
 
Sorry,

hab es nun selber in Access nachgestellt (Hätte Deine Frage richtig lesen sollen :cool_alt: )

als SQL-Statement bekam ich folgendes raus:

SELECT Artikel.Artnr
FROM Preise, Artikel
GROUP BY Artikel.Artnr
HAVING (((Artikel.Artnr) Not In (SELECT Preise.Art FROM Preise)));

Hoffe ich konnte nun Helfen, Rückmeldung währe nett
 
Zuletzt bearbeitet:
kreadon schrieb:
Sorry,

SELECT Artikel.Artnr
FROM Preise, Artikel
GROUP BY Artikel.Artnr
HAVING (((Artikel.Artnr) Not In (SELECT Preise.Art FROM Preise)));
Ich weiss nicht, ob das funktionieren kann. Eine SELECT abfrage in einer SELECT abfraga. Ich habe mich an deine Abfrage herangetastet. Bin jetzt aber beim Gegenteil angekommen.
Bei deiner Abfrage habe ich dedoch einen Fehler in der Having Clause erhalten
 
fliegenkiller schrieb:
Ich weiss nicht, ob das funktionieren kann. Eine SELECT abfrage in einer SELECT abfraga. Ich habe mich an deine Abfrage herangetastet. Bin jetzt aber beim Gegenteil angekommen.
Bei deiner Abfrage habe ich dedoch einen Fehler in der Having Clause erhalten
In Access kannst es probieren, wird sicher funktionieren ;);)

Ich habe nach dem Befehl zur Bildung einer Schnittmenge für SQL gesucht und für Access gefunden ( Having).

fliegenkiller schrieb:
Ich habe aber gelesen im meinem Buch über SQL, dass es einen Basis-SQL-Standart gibt, der ein allen Datenbanken unterstützt wird. (Mit kleinen abweichungen und erweiterungen
;)

Für MySql mußt Du "HAVING" durch "MINUS" ersetzen. Denke das es dann klappt


eben_gefunden
 
Habe das mit der Select Anweisung in der Select Anweisung ausprobiert. Habe es nun hinbekommen, dass er es so macht, wie ich es will (In Access ähnlich wie deinen Vorschlag) Es funktioniert. Danke für die Lösung. Verstehe jetzt auch die JOINs und was bei deiner Lösung eigentlich geschieht. Danke!!
In MySQL funktioniert es jedoch nicht. Obwohl es die Having funktion gibt. Naja ist ja egal. Es funktioniert im Access, das reicht mir.
 
Zuletzt bearbeitet:
Zurück
Oben