MySQL复杂加入错误

时间:2016-03-31 01:44:50

标签: mysql

我在SQL Fiddle中编写了一些代码和所有表查询。我正在编写一个复杂的JOIN查询,我得到一个关于SQL Fiddle的回复“Not unique table / alias:'SalesInvoice'”

这是我的代码:

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 ('George', 'Engel', '190 Pine St', ' A 708 ', 'Polk', 
'WA', 98408, 4173231111, 1234567788, 5555551212);
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),
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));
INSERT INTO SalesInvoice (CustomerID, DonutOrderID, Date,Spec_Hnd_Inst )   VALUES (1, 1, '20160319', 'Extra Sugar');

这是我的复杂加入查询

SELECT salesinvoice.donutorderid, 
       date, 
       spec_hnd_inst, 
       customer.customerid, 
       firstname, 
       lastname, 
       streetadress, 
       apartment, 
       city, 
       zipcode, 
       homephone, 
       mobilephone, 
       otherphone, 
       donutorder.donutorderid, 
       quantity, 
       donut.donutid, 
       NAME, 
       description, 
       unitprice, 
       customer.customerid, 
       firstname, 
       lastname, 
       streetadress, 
       apartment, 
       city, 
       zipcode, 
       homephone, 
       mobilephone, 
       otherphone 
FROM   customer 
       JOIN salesinvoice 
         ON customer.customerid = salesinvoice.customerid 
       JOIN salesinvoice 
         ON donutorder.donutorderid = salesinvoice.donutorderid 
       JOIN donut 
         ON donutorder.donutid = donut.donutid; 

任何指导都会有很大的帮助。

提前致谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT salesinvoice.donutorderid, 
       date, 
       spec_hnd_inst, 
       customer.customerid, 
       firstname, 
       lastname, 
       streetadress, 
       apartment, 
       city, 
       zipcode, 
       homephone, 
       mobilephone, 
       otherphone, 
       donutorder.donutorderid, 
       quantity, 
       donut.donutid, 
       NAME, 
       description, 
       unitprice, 
       customer.customerid, 
       firstname, 
       lastname, 
       streetadress, 
       apartment, 
       city, 
       zipcode, 
       homephone, 
       mobilephone, 
       otherphone 
FROM   customer 
       JOIN salesinvoice 
         ON customer.customerid = salesinvoice.customerid 
       JOIN donutorder
         ON donutorder.donutorderid = salesinvoice.donutorderid 
       JOIN donut 
         ON donutorder.donutid = donut.donutid; 

答案 1 :(得分:0)

可能你在多个表中都有这些列重复,只需包含表名,以便MySQL知道你在使用哪个表。

   customer.city, 
   customer.zipcode, 
   customer.homephone, 
   customer.mobilephone, 
   customer.otherphone