1

我正在尝试在 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;

这是从字符串转换日期和/或时间时它给转换失败的错误。

4

3 回答 3

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;
于 2016-01-16T18:26:31.183 回答
0

您的表结构不正确,您应该对主键使用整数数据类型,而不是 char 或 datetime,因为它会创建索引,并且我们不能在 char 和 date 数据类型上连接表,它们永远不会具有相同的值;最后,from 子句中其他表的连接在哪里。Employee,Plate,Machine应该有加入条件。

主键和外键约束也缺失

于 2016-01-16T18:32:33.803 回答
0

你认为 Date column=char column ?

使用 conver to char 例如

on cast(m.id as char(20))=ma.id 或者更新列类型

于 2016-01-16T19:25:44.003 回答