2017-07-02 5 views
1

Die Datenbank befindet sich unter: http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all. Insbesondere möchte ich die Liste der Kunden erhalten, die im Juli 1996 bei Speedy Express Shipping Company Produktbestellungen aufgegeben haben und von Mitarbeitern bedient wurden: Davolio Nancy und Peacock Margaret. Das Ergebnis sollte:Ich möchte w3school Datenbank abfragen

  • Name des Kunden, Kontakt, Anschrift, Stadt, Postleitzahl und Land
  • Die orderDetailID sie
  • Kontakte der Reederei
  • Produktname, Preis und Menge platziert
  • Produktname, Preis und Einheiten gekauft
  • Kategorie der Produkte

Hier ist meine Frage:

SELECT 
    c.CustomerName, 
    c.ContactName, 
    c.Address, 
    c.City, 
    c.PostalCode, 
    c.Country, 
    o.OrderDetailID, 
    s.Phone, 
    r.ProductName, 
    r.Price, 
    o.Quantity, 
    g.CategoryName 
FROM Customers c 
JOIN Orders d 
    on (c.CustomerID = d.CustomerID) 
LEFT JOIN OrderDetails o 
    on (o.OrderID = d.OrderID) 
LEFT JOIN Shippers s 
    on (s.ShipperID = d.ShipperID) 
LEFT JOIN Products r 
    on (r.ProductID = o.ProductID) 
LEFT JOIN Categories g 
    on (g.CategoryID = r.CategoryID) 
LEFT JOIN Employees e 
    on (e.EmployeeID = d.EmployeeID) 
WHERE s.ShipperName = 'Speedy Express' AND 
    ((e.LastName = 'Davolio' AND e.FirstName = 'Nancy') OR 
    (e.lastName = 'Peacock' AND e.firstName = 'Margaret')) AND 
    EXTRACT(YEAR_MONTH FROM d.OrderDate) = 199607; 

-I-Fehler erhalten, die sagt:

ERROR 1: Could not prepare statement (1 near "FROM": syntax error) 

Wenn ich entfernen Sie die letzte Bedingung (der das Datum Extrahieren) wie folgt:

SELECT c.CustomerName, c.ContactName, c.Address, c.City, c.PostalCode, c.Country, o.OrderDetailID, s.Phone, r.ProductName, r.Price, o.Quantity, g.CategoryName FROM Customers c JOIN Orders d on (c.CustomerID = d.CustomerID) LEFT JOIN OrderDetails o on (o.OrderID = d.OrderID) LEFT JOIN Shippers s on (s.ShipperID = d.ShipperID) LEFT JOIN Products r on (r.ProductID = o.ProductID) LEFT JOIN Categories g on (g.CategoryID = r.CategoryID) LEFT JOIN Employees e on (e.EmployeeID = d.EmployeeID) WHERE s.ShipperName = 'Speedy Express' AND((e.LastName = 'Davolio' AND e.FirstName = 'Nancy') OR (e.lastName = 'Peacock' AND e.firstName = 'Margaret')); 

die Fehler verschwindet. Also bitte wie kann ich den Year_month Zustand beheben, ohne Fehler zu bekommen!

+0

Welche MySQL-Version verwenden Sie? –

+0

Ich benutze SQL Editor auf w3schools.com –

Antwort

1

Eine Möglichkeit ist, dass Ihre Version von MySQL, aus welchem ​​Grund auch immer, keine YEAR_MONTH unterstützt, die mit EXTRACT() verwendet wird. Eine Abhilfe wäre hier DATE_FORMAT() zu verwenden, anstatt:

WHERE DATE_FORMAT(d.OrderDate, '%Y%m') = '199607' 

Um zu testen, ob Sie eine alte Version von EXTRACT(), versuchen Sie einfach die folgende einfache Abfrage ausgeführt wird:

SELECT EXTRACT(YEAR_MONTH FROM NOW()); 

Wenn diese Fehler, dann meine Vermutung ist richtig.

Verwandte Themen