Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建表(新列)和来自不同表的列_Mysql_Sql - Fatal编程技术网

Mysql 创建表(新列)和来自不同表的列

Mysql 创建表(新列)和来自不同表的列,mysql,sql,Mysql,Sql,比如说。我有一张桌子 该表的名称为“供应商” 包含: 1. SupplierName 2. SupplierID 我想创建另一个新表名 其中包含的新列 1. ContractID (new column) 2. SupplierID(from "Suppliers" table) 3. ContractValue (new column) 我该怎么做 我已经研究过了,大多数人告诉我使用创建表然后选择,但它不起作用,我也尝试过改变表,但仍然不起作用 创建表合同 收缩INT不为空, 选

比如说。我有一张桌子 该表的名称为“供应商” 包含:

 1. SupplierName
 2. SupplierID
我想创建另一个新表名 其中包含的新列

 1. ContractID (new column)
 2. SupplierID(from "Suppliers" table)
 3. ContractValue (new column)
我该怎么做

我已经研究过了,大多数人告诉我使用创建表然后选择,但它不起作用,我也尝试过改变表,但仍然不起作用

创建表合同 收缩INT不为空, 选择供应商ID 从供应商那里, ContractValue INT不为空, 合同开始日期不为空 这些代码不起作用,所以我不确定解决方案是什么

创建表合同 收缩INT不为空, 选择供应商ID 从供应商那里, ContractValue INT不为空, 合同开始日期不为空
我希望结果是一个新表,包含压缩的新列、来自表供应商的SupplierID和另一个名为ContractValue的新列。我不知道下面的方法是否可以解决您的问题

复制一份供应商表 从复制的表中删除不必要的列 添加要添加到其中的新列。
将Select查询结果集视为一个表或数据网格

因此,从[some table]中选择[some fields]返回数据网格,其中每行包含表中的一些字段

因此,您可以将表定义为select query with data,或者指定结构并创建空表。很可能您不想将这两种方法混合使用

在您的情况下,合同表的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
当然,这是非常简单的描述

首先,必须将construcd指定为主键。然后,只有将主键指定为自动递增值时,上面的查询才会工作,否则必须使用一些逻辑并显式指定它

此外,如果要使用非空字段,则必须指定默认值

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

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

您可以使用CTAS命令


这将创建一个包含所有字段的表。默认值是指定数据类型。您可以使用相关值更新表,也可以在select子句本身中使用联接。

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

创建新表\u表\u名称为 选择[column1,column2…columnN] 从现有_表_名称 [其中]

这里,第1栏,第2栏。。。是现有表的字段,该字段将用于创建新表的字段

范例 下面是一个示例,它将使用CUSTOMERS表创建一个SALARY表,并包含customer ID和customer SALARY字段−

SQL>将表创建为 选择ID、薪资
来自客户

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

导出现有表。 在notepad++中打开并更改现有表名,添加我的新列并导入。
谢谢

Aloha,谢谢您的评论,但是,插入数据代码错误1:由于约束失败而无法执行语句19 not NULL约束失败:Contracts.ContractDright,由于construcd id不为NULL,您可以通过在CREATETABLE语句中删除construcd之后的NOTNULL来简单地修复错误,但是这在SQL中不是一种很好的方法。您需要做的是将字段指定为主键和自动递增值。您还可以在INSERT语句下指定一些伪值。这取决于您的业务逻辑,您必须了解自己在做什么。因此,您需要阅读文档并选择更适合您的内容。
CREATE TABLE Contracts as
SELECT 
0 as ContractID,
SupplierID,
0 as ContractValue, 
now() as ContractStart
FROM Suppliers;