例如。我有一张桌子
该表的名称为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
答案 0 :(得分:0)
我不知道以下方法是否可以解决您的问题
Suppliers
表答案 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)
我上周做了,就像你想做的那样。 我只遵循了两个步骤:
谢谢