2016-04-04 43 views
1

SQL için çok yeni ve hata # 1146 tablosunu almaya devam ediyorum, ancak var. Birisi benim kodumda nerede sorun olduğuna işaret edebilir. İşte Tablo mevcut değil, ancak mevcut

CREATE TABLE IF NOT EXISTS `Donut` 
(
`DonutID` INT NOT NULL AUTO_INCREMENT, 
`name` VARCHAR(20) NOT NULL, 
`Description` VARCHAR(10) NOT NULL, 
`price` DECIMAL(5,2) NOT NULL, 
PRIMARY KEY (`DonutID`)); 

CREATE TABLE IF NOT EXISTS `Customer` 
(
`CustomerID` INT NOT NULL AUTO_INCREMENT, 
`FirstName` VARCHAR(15) NOT NULL, 
`LastName` VARCHAR(15) NOT NULL, 
`Street` VARCHAR(20) NOT NULL, 
`Apartment` VARCHAR(5) NULL DEFAULT NULL, 
`City` VARCHAR(20) NOT NULL, 
`State` VARCHAR(2) NOT NULL, 
`zip` INT(5) NULL, 
`Homephone`BIGINT(12) NULL, 
`Cellphone`BIGINT(12) NULL, 
`Otherphone`BIGINT (12)NUll, 
PRIMARY KEY (`CustomerID`) 
); 
CREATE TABLE IF NOT EXISTS `SalesOrder` 
( 
`DonutOrderID` INT NOT NULL AUTO_INCREMENT, 
`SpecialNotes` VARCHAR(35) NULL DEFAULT NULL, 
`date` DATETIME, 
`CustomerID` INT NOT NULL, 
Primary KEY(`DonutOrderID`,`CustomerID`), 
FOREIGN KEY (`CustomerID`) REFERENCES `Customer` (`CustomerID`) 
); 
CREATE TABLE IF NOT EXISTS `SalesOrderDetails` 
(
`DetailsID` INT, 
`qty` INT, 
`DonutOrderID` INT, 
`DonutID` INT, 
PRIMARY KEY (`DetailsID`,`DonutOrderID`,`DonutID`), 
FOREIGN KEY (`DonutOrderID`) REFERENCES `SalesOrder` (`DonutOrderID`) 
ON DELETE NO ACTION ON UPDATE NO ACTION, 
FOREIGN KEY (`DonutID`) REFERENCES `Donut` (`DonutID`) 

); 

CREATE OR REPLACE VIEW `CustomerFullName` 
AS SELECT *, CONCAT('firstName',' ','lastName') AS customerFullName FROM Customer; 

CREATE INDEX `Donut_name_idx` ON `Donut` (`name` ASC); 

INSERT INTO Customer (CustomerID, FirstName, LastName, Street, apartment,  City, State, Zip,Homephone,Cellphone,Otherphone) 
VALUES (1, 'John', 'Smith', '12 Main street', 'A', 'Lumberton', 'NJ', '08048','6092651212',null,null); 
INSERT INTO Donut (DonutID, Name, Description, price) 
VALUES (1,'Chocalte Donut','Choclate',1.25); 
INSERT INTO `SalesOrder` (DonutOrderID,CustomerID,SpecialNotes) 
VALUES (1,1, 'Make sure they are fresh!'); 
INSERT INTO `SalesOrderDetails`(DonutOrderID, DonutID,qty) 
VALUES (1,1,3); 

Sorgumda

SELECT Customer.FirstName, Customer.LastName, Customer.street,  Customer.apartment, 
Customer.city, Customer.state, Customer.zip, Customer.Homephone,Customer.Cellphone,Customer.Otherphone, Donut.Name, Donut.Description, Donut.price, 
SalesOrder.DonutOrderID, 
Donut.DonutID, 
SalesOrder.specialNotes, 
Customer.CustomerID, 
date 
FROM `SalesOrder`,`SalesOrderDetails` 
INNER JOIN SalesOrderDetails.DonutOrderID ON SalesOrder=  SalesOrder.DonutOrderID 
INNER JOIN Customer ON SalesOrder.CustomerID= Customer.CustomerID 
INNER JOIN Donut ON `DonutID` = DonutID 

Teşekkür

+8

Kişisel hatası ... İÇ SalesOrderDetails.DonutOrderID' JOIN 'içindedir. Bir tabloya katılmanız gerekir, bir sütun değil, bu nedenle olmalıdır 'INNER JOIN SalesOrderDetails ON SalesOrderDetails.DonutOrderID = SalesOrder.DonutOrderID' – abl

+0

Hata iletisi yanıltıcı olabilir, ancak sorun kesinlikle JOIN sözdiziminde – andrechalom

+0

Bunu yaptığınızda Benzersiz tablo/takma ad vermeyi sürdürdü: 'SalesOrderDetails' bu yüzden farklı bir hata almak için kod değiştirmeyi denedim ve tablo DonutOrderID yokken yazıyor. – Chris

cevap

0

Sorgunuzda yanlış JOIN ler dahil ve tutarsız ters tırnakların olan/olmayan Sütunlarınızı erişen birkaç sözdizimi hataları var koddur.

bunu geliştirmeye çalıştık ve işte burada:

SELECT 
    c.`FirstName`, c.`LastName`, c.`Street`, c.`Apartment`, c.`City`, 
    c.`State`, c.`zip`, c.`Homephone`, c.`Cellphone`, c.`Otherphone`, 
    d.`name`, d.`Description`, d.`price`, 
    so.`DonutOrderID`, d.`DonutID`, so.`specialNotes`, c.`CustomerID`, o.`date` 
FROM `SalesOrder` so 
INNER JOIN `SalesOrderDetails` sod ON so.`DonutOrderID` = sod.`DonutOrderID` 
INNER JOIN `Customer` c ON so.`CustomerID` = c.`CustomerID` 
INNER JOIN `Donut` d ON d.`DonutID` = sod.`DonutID` 
+0

Geri bildiriminiz için teşekkür ederiz. Öğrenmeye çalışıyorum bu yüzden c.'FirstName ve so.'DonutOrderID anlıyorum. – Chris

+0

Eğer SalesOrderDetails dan qty isterseniz sadece 'SalesOrderDetails' sod aynı satırda FROM ekleyebilirsiniz? Ben 'qty' – Chris

+1

görüntülemek istiyorum Ben SQL hakkında bazı temel öğretici okumak gerekir inanıyorum. SELECT maddesinde almak istediğiniz sütunları listeleyin. öyleyse, sod, c ve d tablo isimleri için takma adlardır (kısa kod) –