创建表(新列)和其他表中的列

时间:2019-10-28 03:58:25

标签: mysql sql

例如。我有一张桌子 该表的名称为Suppliers 包含:

 1. SupplierName
 2. SupplierID

我想创建另一个新表名Contracts 其中包含新列

 1. ContractID (new column)
 2. SupplierID(from "Suppliers" table)
 3. ContractValue (new column)

我该怎么做?

我已经研究了,大多数人告诉我使用Create table然后选择,但是它不起作用,我也尝试过alter table但仍然不起作用。

CREATE TABLE Contracts (
  ContractID INT NOT NULL, 
SELECT SupplierID 
FROM Suppliers,
  ContractValue INT NOT NULL, 
  ContractStart DATE NOT NULL)

这些代码不起作用,所以我不确定解决方案是什么。

CREATE TABLE Contracts (
  ContractID INT NOT NULL, 
(SELECT SupplierID 
FROM Suppliers),
  ContractValue INT NOT NULL, 
  ContractStart DATE NOT NULL)

我希望结果是包含ContractID(新列),SupplierID(来自表Suppliers)和另一个名为ContractValue

的新列的新表。

5 个答案:

答案 0 :(得分:0)

我不知道以下方法是否可以解决您的问题

  1. 复制Suppliers
  2. 从复制的表格中删除不必要的列
  3. 添加所需的新列。

答案 1 :(得分:0)

选择查询结果集为表或数据网格的想法。

因此,“从[某些表]中选择[某些字段]”将返回数据网格,其中每一行都包含表中的某些字段。

因此,您可以将表定义为带有数据的选择查询,也可以指定结构并创建空表。您很可能不想混合使用这两种方法。

在您的情况下,合同表的SupplierID字段是对Supplier表的SupplierID的引用。在SQL中,它称为“外键”。从理论上讲,您可以使用select语句来创建新表,并且当您使用数据库查询进行大量操作时,将根据需要选择最方便,最快捷的方式。

但是,当您开始学习时,最好创建一个具有结构的空表,然后使用新字段和外键的现有数据插入数据。

因此,查询将类似于:

CREATE TABLE Contracts ( 
    ContractID INT NOT NULL,
    SupplierID INT NOT NULL,
    ContractValue INT,
    ContractStart DATE
);

然后您可以使用供应商表中的现有值来插入数据:

INSERT INTO Contracts (SupplierID)
SELECT SupplierID FROM Suppliers

当然,这是非常简化的描述

首先,您必须指定ContractID作为主键。然后,仅当您将主键指定为自动增量值时,以上查询才会起作用,否则,您必须使用一些逻辑并显式指定它。

此外,如果要使用NOT NULL字段,则必须指定默认值。

您还可以将SupplierID指定为外键,以便仅添加现有值,并支持其他一些完整性关系。

有关详细信息,请参见任何MySQL或SQL文档。

答案 2 :(得分:0)

您可以使用CTAS命令。

CREATE TABLE Contracts as
SELECT 
0 as ContractID,
SupplierID,
0 as ContractValue, 
now() as ContractStart
FROM Suppliers;

这将创建一个包含所有字段的表。默认值为指定dataType。您可以使用相关值更新表,或者在select子句本身中包含join

答案 3 :(得分:0)

从另一个表创建表的基本语法如下

创建表NEW_TABLE_NAME AS    SELECT [column1,column2 ... columnN]    来自EXISTING_TABLE_NAME    [WHERE]

这里,column1,column2 ...是现有表的字段,并且将使用它们来创建新表的字段。

示例 以下是一个示例,该示例将使用CUSTOMERS表创建一个表SALARY,并具有字段customer ID和customer SALARY-

SQL> CREATE TABLE SALARY AS    SELECT ID,薪水    来自客户;

答案 4 :(得分:0)

我上周做了,就像你想做的那样。 我只遵循了两个步骤:

  1. 导出现有表。
  2. 在notepad ++中打开并更改现有表名,添加新列并导入。

谢谢