在sql中的表行作为新表

时间:2016-10-02 10:42:09

标签: mysql sql sql-server

我有一张包含ID,姓名,日期和类别的表格。 我希望Category也是一个表,包含行ID和名称。 我怎么能这样做?

3 个答案:

答案 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  */
   );

我还要添加与此查询相关的示例图片,看看希望它可以帮助您RelationShip

答案 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