【问题标题】:Table does not exist, but it does exist表不存在,但确实存在
【发布时间】:2016-04-04 22:45:56
【问题描述】:

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

这是我的查询代码

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

谢谢

【问题讨论】:

  • 你的错误在... INNER JOIN SalesOrderDetails.DonutOrderID。你必须加入一个表,而不是一个列,所以它应该是INNER JOIN SalesOrderDetails ON SalesOrderDetails.DonutOrderID = SalesOrder.DonutOrderID
  • 错误信息可能会产生误导,但问题肯定出在 JOIN 语法上
  • 当我这样做时,它一直说 Not unique table/alias: 'SalesOrderDetails' 所以我尝试更改代码以获得不同的错误,那就是它说 table DonutOrderID 不存在。
  • 我同意问题出在连接中,因为我可以构建模式,所以我知道创建表部分正在工作。 join 命令的正确语法是什么,以便我可以看到插入的所有信息?

标签: mysql database


【解决方案1】:

您的查询有几个语法错误,包括错误的JOINs 以及不一致地访问带有/不带有反引号的列。

我已经尝试改进它,它是:

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`

【讨论】:

  • 感谢您的反馈。我正在努力学习,所以我理解 c.FirstName and so.DonutOrderID。
  • 如果我想要 SalesOrderDetails 中的数量,我可以在 FROM 的同一行添加 SalesOrderDetails sod 吗?我想显示qty
  • 我相信你应该阅读一些关于 SQL 的基础教程。列出要在 SELECT 子句中检索的列。所以,sod、c 和 d 是表名的别名(更短的代码)
  • 感谢@Consider Me 的帮助。我理解你的代码。
猜你喜欢
  • 2018-08-02
  • 2011-05-14
  • 2015-06-16
  • 2015-09-25
  • 1970-01-01
  • 2017-10-19
  • 2017-05-26
  • 2016-03-08
相关资源
最近更新 更多