Ich mache Praxisabfragen, um meine SQL-Kenntnisse zu verbessern (ich bin ein Anfänger), und ich stieß auf dieses Problem, dass ich Hilfe bei der Verwendung der Northwind-Datenbank benötige. Die angeforderte Abfrage sollte:SQL-Vergleichsabfrage
Geben Sie den Namen der Mitarbeiter und der Stadt, wo sie leben für Mitarbeiter, die an Kunden in der gleichen Stadt verkauft haben.
Was ich dafür geschrieben war:
USE Northwind;
SELECT DISTINCT FirstName, LastName, e.City
FROM Employees e
INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID
INNER JOIN Customers c ON o.CustomerID = c.CustomerID
INNER JOIN Customers ON c.City = e.City
WHERE e.City = ANY(SELECT Customers.City FROM Customers);
I 6 Mitarbeiter zurück bin, aber ich bin nicht sicher, dass sie richtig sind, und ich glaube, dass meine WHERE-Anweisung als auch die falsche ist.
Grundsätzlich meine Frage ist, verwende ich die richtigen Join-Anweisungen und wie gehe ich zum Filtern von Ergebnissen mit der WHERE-Anweisung? Ich bin mir nicht sicher, wie man einen bestimmten Datensatz mit anderen Datensätzen vergleicht. Ausgehend von einem Java-Hintergrund bin ich an For-Schleifen gewöhnt, die jedes einzelne "Objekt" (Datensatz) mit einem bestimmten Feld von einem anderen "Objekt" überprüfen können. In diesem Fall frage ich mich, wie ich das City-Attribut jedes Datensatzes aus der Employees-Tabelle mit dem City-Attribut der Datensätze in der Customers-Tabelle überprüfen kann. Jeder Rat wird geschätzt, danke!
Ihre Joins sind nicht korrekt, da Sie der Tabelle "Kunden" zweimal beitreten. Ändern Sie "INNER JOIN Customers" auf "AND" und entfernen Sie die WHERE-Klausel und Sie sollten gut sein. – Welbog