2016-04-13 5 views
-1

Я попытался выполнить сложный запрос соединения на SQLFiddle, но продолжал получать ошибки. Требуется распечатать все основные атрибуты в инструкции select. Застрял в течение последних нескольких дней. Полезная рука будет очень оценена.Сложная ошибка при получении запроса

`CREATE TABLE Customer` 
`(CustomerID INT(255) NOT NULL AUTO_INCREMENT,` 
`FirstName VARCHAR(255) NOT NULL,` 
`LastName VARCHAR(255) NOT NULL,` 
`StreetAddress VARCHAR(255) NOT NULL,` 
`Apartment VARCHAR(255) NOT NULL,` 
`City VARCHAR(255) NOT NULL,` 
`State VARCHAR(2) NOT NULL,` 
`ZipCode CHAR(9) NOT NULL,` 
`HomePhone CHAR(10) NOT NULL,` 
`MobilePhone CHAR(10) NOT NULL,` 
`OtherPhone CHAR(10) NOT NULL,` 
`PRIMARY KEY (CustomerID));` 
`INSERT INTO Customer ` 
`(FirstName, LastName, StreetAddress, Apartment, City, State,` 
`ZipCode, HomePhone, MobilePhone, OtherPhone)` 
`VALUES ('Max', 'Karl', '101 Main', ' ABC ', 'ABC', ` 
`'TX', 77077, 12345, 987654, 963258);` 
`SELECT CustomerID, (CONCAT (firstname, ' ', Lastname)) as FullName,` `StreetAddress, Apartment, City, State, ZipCode, Homephone, `mobilephone,`otherphone FROM customer;` 

`CREATE TABLE Donut` 
`(DonutID INT(255) NOT NULL AUTO_INCREMENT,` 
`Name VARCHAR(255) NOT NULL,` 
`Description VARCHAR(255) NOT NULL,` 
`UnitPrice DECIMAL(3,2) NOT NULL,` 
`PRIMARY KEY (DonutID));` 
`INSERT INTO Donut (Name, Description, UnitPrice)` 
`VALUES ('Plain', 'Plain Donut', '1.50'),` 
`('Glazed', 'Glazed Donut', '1.75'),` 
`('Cinnamon', 'Cinnamon Donut', '1.75'),` 
`('Chocolate', 'Chocolate Donut', '1.75'),` 
`('Sprinkle', 'Sprinkle Donut', '1.75'),` 
`('Gluten-Free', 'Gluten-Free Donut', '2.00');` 
`CREATE INDEX DonutName ON Donut (Name);` 

`CREATE TABLE DonutOrder` 
`(DonutOrderID INT (255) NOT NULL AUTO_INCREMENT,` 
`DonutID INT(255) NOT NULL,` 
`Quantity INT(255),` 
`PRIMARY KEY (DonutOrderID, donutID),` 
`FOREIGN KEY (donutID) REFERENCES Donut(donutID),` 
`INDEX Donut(donutID));` 
`INSERT INTO DonutOrder (DonutID, Quantity)` 
`VALUES ((SELECT DonutID FROM Donut WHERE DonutID = 1), 1),` 
    ` ((SELECT DonutID FROM Donut WHERE DonutID = 2), 5),` 
    ` ((SELECT DonutID FROM Donut WHERE DonutID = 3), 12),` 
    `((SELECT DonutID FROM Donut WHERE DonutID = 4), 3),` 
    `((SELECT DonutID FROM Donut WHERE DonutID = 5), 4),` 
    ` ((SELECT DonutID FROM Donut WHERE DonutID =6), 5);` 

`CREATE TABLE SalesInvoice` 
`(CustomerID INT(255) NOT NULL,` 
`DonutOrderID INT(255) NOT NULL AUTO_INCREMENT,` 
`Date date NOT NULL,` 
`Spec_Hnd_Inst VARCHAR(255),` 
`PRIMARY KEY (DonutOrderID),` 
`INDEX Customer (CustomerID),` 
`FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID),` 
`INDEX DonutOrder (donutOrderID));` 

`SELECT Customer.CustomerID, FirstName, LastName, StreetAddress, Apartment, City, ` 
`State, ZipCode, HomePhone, MobilePhone, OtherPhone, Donut.DonutID, Name,` 
`Description, UnitPrice, DonutOrder.DonutOrderID, DonutOrder.DonutID, ` 
`Quantity, SalesInvoice.DonutOrderID, SalesInvoice.CustomerID` 
`FROM donut JOIN Customer ON SalesInvoice.CustomerID = Customer.CustomerID` 
`JOIN DonutOrder ON Donut.DonutID = DonutOrder.DonutID` 
`JOIN SalesInvoice ON DonutOrder.DonutID = SalesInvoice.DonutOrderID` 
+0

Какова была ошибка? – Backtrack

+0

Если вы попытались на SQLFiddle, тогда загрузите эту ссылку также –

+0

Только что получил ответ от предыдущего сообщения. Спасибо вам всем. – Djongoure

ответ

1

Вы пытаетесь ссылаться на SalesInvoice таблицу в join, прежде чем вы на самом деле join к нему - и, следовательно, не существует. Вам просто нужно изменить порядок ваших объединений:

SELECT Customer.CustomerID, FirstName, LastName, StreetAddress, 
     Apartment, City, State, 
     ZipCode, HomePhone, MobilePhone, 
     OtherPhone, Donut.DonutID, Name, Description, 
     UnitPrice, DonutOrder.DonutOrderID, DonutOrder.DonutID, 
     Quantity, SalesInvoice.DonutOrderID, 
     SalesInvoice.CustomerID 
FROM donut 
    JOIN DonutOrder ON Donut.DonutID = DonutOrder.DonutID 
    JOIN SalesInvoice ON DonutOrder.DonutID = SalesInvoice.DonutOrderID 
    JOIN Customer ON SalesInvoice.CustomerID = Customer.CustomerID 
0

Упрощенная на запрос выполняется, как показано ниже

 
SELECT c.*, d.*, dor.*, si.* 
    FROM donut d 
    left outer JOIN DonutOrder dor ON dor.DonutID = d.DonutID 
    left outer JOIN SalesInvoice si ON si.DonutOrderID = si.DonutOrderID 
    left outer JOIN Customer c on c.CustomerID = si.CustomerID