2016-04-04 27 views
1

私はSQLに非常に慣れていて、#1146テーブルが存在しないというエラーが発生していますが、存在しています。誰かが私のコードのどこに問題があるのか​​を指摘できますか?ここでテーブルは存在しませんが、存在しています

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); 

は私のクエリのコードは、あなたのクエリが間違っJOIN Sを含むと一貫性なくバッククォートなし/を使用して列にアクセスするいくつかの構文エラーがあり

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 

おかげ

+8

あなたのエラーが... INNERがSalesOrderDetails.DonutOrderID'のJOIN 'です。 'INNER JOIN SalesOrderDetails ON SalesOrderDetails.DonutOrderID = SalesOrder.DonutOrderID' – abl

+0

エラーメッセージは誤解を招く可能性がありますが、問題は間違いなくJOIN構文 – andrechalom

+0

にあります私は別のエラーを取得するためにコードを変更しようとしましたが、テーブルDonutOrderIDが存在しないと言います。 – Chris

答えて

0

です。

は、私はそれを改善しようとしたとここにある:

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

フィードバックいただきありがとうございます。私は学ぶために努力しています。だから私はc.FirstNameとそういうことを理解しています.DonutOrderID。 – Chris

+0

SalesOrderDetailsから数量を欲しければ、私は 'SalesOrderDetails' sodをFROMの同じ行に追加できますか? 'qty'を表示したい – Chris

+1

私は、SQLについての基本的なチュートリアルを読むべきだと思います。 SELECT句で取得する列をリストします。だから、sod、c、dはテーブル名のエイリアスです(短いコード) –