我试图在4个表计划表,员工表,机器表和板位表之间执行连接。
问题是,在计划表中,其主键是日期,而表的其余部分的主键为char。我试图将表中的主键转换为char,使其与其他键中的主键相同,但我不知道如何。这是我到目前为止所做的事情
create table Machine
(
MachineID char(5),
MachineType varchar(10) NOT NULL,
MachineStatus varchar(10)NOT NULL
)
create table Employee
(
EmployeeID char(5) Primary Key,
EmployeeName varchar(30) NOT NULL,
)
create table Plate
(
PlateID char(5) Primary Key,
PlateModel varchar(30) NOT NULL,
)
create table MachineSchedule
(
DateSchedule date Primary Key,
)
这是我的加入
SELECT Employee.EmployeName, Plate.PlateModel, Machine.MachineID, Machine.MachineType, Machine.MachineStatus
FROM Employee, Plate, Machine
JOIN MachineSchedule
ON MachineSchedule.DateSchedule=Machine.MachineID;
以下是它给出的错误从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:0)
表格设计及其关系未正确完成。基于这种设计和关系,最简单的解决方案,我的意思是无错误的查询:
DROP TABLE [MachineSchedule];
创建表
CREATE TABLE [dbo].[MachineSchedule](
[DateSchedule] [date] NOT NULL,
[MachineID] [char](5) NULL,
PRIMARY KEY CLUSTERED
(
[DateSchedule] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
更改了查询
SELECT Employee.EmployeeName, Plate.PlateModel, Machine.MachineID, Machine.MachineType, Machine.MachineStatus
FROM Employee, Plate, Machine
JOIN MachineSchedule
ON MachineSchedule.MachineID = Machine.MachineID;
答案 1 :(得分:0)
您的表结构不正确,您应该使用整数数据类型作为主键而不是char或datetime作为其创建索引,并且我们不能在char和date数据类型上连接表,它们从不具有相同的值;最后,from子句中其他表的连接在哪里。员工,板材,机器应该有加入条件。
并且缺少主键和外键约束
答案 2 :(得分:0)
你想 Date column = char column?
与conver一起使用char 例如
在 cast(m.id as char(20))= ma.id 或者更新列类型