使用SELECT在MySQL中创建的视图输出错误

使用SELECT在MySQL中创建的视图输出错误,mysql,database,database-design,Mysql,Database,Database Design,我正在为一家朝臣公司创建一个数据库,我有5个亲戚 CREATE TABLE Customer ( cid int(7) NOT NULL, cfname char(25) NOT NULL, clname char(25) NOT NULL, aptnum int(100) NOT NULL, street char(50) NOT NULL, pobox int(10) NOT NULL, area char(50) NOT NULL, country char(50) NOT NUL

我正在为一家朝臣公司创建一个数据库,我有5个亲戚

CREATE TABLE Customer
(
cid int(7) NOT NULL,
cfname char(25) NOT NULL, 
clname char(25) NOT NULL, 
aptnum int(100) NOT NULL,
street char(50) NOT NULL, 
pobox int(10) NOT NULL,
area char(50) NOT NULL, 
country char(50) NOT NULL, 
phone int(12) NOT NULL,
PRIMARY KEY (cid)
)ENGINE=INNODB;

CREATE TABLE Orderr
(
orderid int(8) NOT NULL, 
origin char(100) NOT NULL, 
destination char(100) NOT NULL, 
eta date NOT NULL, 
weight int(100) NOT NULL,
priority enum('F','R') NOT NULL,
task enum('P','D') NOT NULL, 
odate date NOT NULL, 
cnum int(12) NOT NULL, 
cpin int(8) NOT NULL,
custid int(7) NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (custid) REFERENCES Customer(cid)
)ENGINE=INNODB;


CREATE TABLE History 
(
histid int(6) NOT NULL, 
orderid int(8) NOT NULL, 
status enum('D','O','R') NOT NULL, 
current_loc char(50) NOT NULL,
PRIMARY KEY(histid), 
FOREIGN KEY (orderid) REFERENCES Orderr(orderid)
)ENGINE=INNODB;

CREATE TABLE Driver
(
driverid int(6) NOT NULL,
dfname varchar(25) NOT NULL,
dlname varchar(25) NOT NULL,
dob date NOT NULL,
phone int(10) NOT NULL,
vehicle int(6) NOT NULL,
PRIMARY KEY (driverid)
)ENGINE=INNODB;

CREATE TABLE Vehicle
(
vid int(6) NOT NULL, 
num_plate varchar(6) NOT NULL, 
vtype enum('T','B','P') NOT NULL,
driverr int(6) NOT NULL,
orders int(8) NOT NULL,
PRIMARY KEY (vid),
FOREIGN KEY (driverr) REFERENCES Driver(driverid),
FOREIGN KEY (orders) REFERENCES Orderr(orderid)
)ENGINE=INNODB;
我正在尝试为客户创建一个视图,以便访问特定列,下面是查询

CREATE VIEW CustView AS
SELECT cfname, clname, aptnum, street, pobox, area, country, origin, destination, weight, priority, task, eta, odate, dfname, dlname, driver.phone
FROM Customer, Orderr, Vehicle, Driver
WHERE Customer.cid=Orderr.custid AND Vehicle.driverr=Driver.driverid AND Orderr.orderid=Vehicle.orders;
当我运行
SELECT*FROM CustView
时,我没有得到所需的输出。我应该对我的问题或我的关系做些什么改变


谢谢。

正如前面的海报所说,我只能猜测。但从您的表和视图定义来看,我怀疑您没有正确地建模车辆和订单之间的关系。一辆车可以用于很多订单,对吗?在这种情况下,车辆id必须是订单表中的外键。你的设计正好相反


与你的问题无关,我怀疑你的历史记录表。完成订单的历史只包括过去的订单,对吗?因此,历史记录将只是一个视图,通过其中包含的某些日期的过去值来选择订单。

如果您不告诉我们所需的输出是什么,我们如何告诉您需要进行哪些更改?对于初学者,放弃连接操作的老式逗号语法。使用
JOIN
关键字并将连接谓词移动到
ON
子句。另外,使用表名或表别名限定所有列引用。获取一条SELECT语句,该语句返回“所需输出”,然后再将其放入
CREATE VIEW
语句中。至于您的
选择所需的其他更改,这是否真的取决于您想要返回的内容?没有说明,没有示例数据,没有说明是什么导致输出不受欢迎,我们只是猜测。@spencer7593非常感谢您的见解。我还在大学学习MySQL,我还有很多东西要学。下次创建表时,我会记住这些提示。
视图
定义中的
选择
是否会产生相同的错误数据?如果是这样的话,那么
视图
就成了转移视线的问题,应该从讨论中删除。