我有一张包含ID,姓名,日期和类别的表格。 我希望Category也是一个表,包含行ID和名称。 我怎么能这样做?
答案 0 :(得分:2)
您好,这是一个很大的概念性问题您应该了解更多关于此问题。我正在为您的问题添加一些ans表创建查询
CREATE TABLE Info_table(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
Date date NOT NULL,
Category_ID INT references CATEGORIES(ID),
PRIMARY KEY (ID)
);
/*Category Table */
CREATE TABLE Category_table(
ID INT NOT NULL,
Category_NAME VARCHAR (20) NOT NULL,
PRIMARY KEY (ID) /*Primary Key which is used as a foreign key in the first table */
);
答案 1 :(得分:1)
假设,InitialTable是您当前的表,我们将创建一个名为NewTable的新表。
CREATE TABLE NewTable
(
ID int,
Name VARCHAR(100),
Category int -- I don't knopw the type of category
)
INSERT INTO NewTable(ID, Name, Category)
SELECT ID, Name, Category FROM InitialTable
如果要从初始表中删除“类别”列,请使用以下
ALTER TABLE InitialTable
DROP COLUMN Category
答案 2 :(得分:1)
对于 SQL Server :
我认为你有类似的东西:
CREATE TABLE SomeTable (
ID int IDENTITY (1,1),
[Name] nvarchar(max),
[Date] date,
[Category] nvarchar(max),
CONSTRAINT PK_SomeTable_ID PRIMARY KEY CLUSTERED (ID)
)
INSERT INTO SomeTable ([Name], [Date], [Category]) VALUES
('w',GETDATE(),'Category1'),
('q',GETDATE(),'Category2')
所以你会在SomeTable
:
ID Name Date Category
1 w 2016-10-02 Category1
2 q 2016-10-02 Category2
你需要将所有category
放在新表(字典)中,每个类别都有唯一的ID,在SomeTable
中你只需要存储类别ID。
首先创建新表:
CREATE TABLE Category (
CatId int IDENTITY(1,1), --or unuqueidentifier or whatever
CategoryName nvarchar(max),
CONSTRAINT PK_Category_CatId PRIMARY KEY CLUSTERED (CatId)
)
在新表中插入唯一的类别名称:
INSERT INTO Category (CategoryName)
SELECT DISTINCT [Category]
FROM SomeTable
将新列添加到SomeTable
:
ALTER TABLE SomeTable ADD CatId int NULL
更新新列中的值:
UPDATE s
SET CatId = c.CatId
FROM SomeTable s
INNER JOIN Category c
ON s.[Category] = c.CategoryName
删除Category
列:
ALTER TABLE SomeTable DROP COLUMN [Category]
添加FK:
ALTER TABLE SomeTable
ADD CONSTRAINT FK_SomeTable_Category FOREIGN KEY (CatId)
REFERENCES Category (CatId) ;
CatId
中的SomeTable
不可为空:
ALTER TABLE SomeTable ALTER COLUMN CatId int NOT NULL;
之后你会:
--SomeTable
ID Name Date CatId
1 w 2016-10-02 1
2 q 2016-10-02 2
--Category
CatId CategoryName
1 Category1
2 Category2