Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Join_Merge_Create Table - Fatal编程技术网

MySQL-如何创建一个新表,该表是两个现有表的主键上的连接

MySQL-如何创建一个新表,该表是两个现有表的主键上的连接,mysql,join,merge,create-table,Mysql,Join,Merge,Create Table,我有两个现有的表,除了主ID(一个varchar,而不是一个int)之外,都有不同的字段。我想创建第三个表,它本质上是这两个表的合并,这样对于给定的主键,所有字段都在一个表中 如何做到这一点?如果您确定对于给定的主ID,两个表中都有一行且正好有一行,那么这应该可以: SELECT tablea.field1, tablea.field2, tablea.field3, ... tablea.fieldn, <---- field list tableb.field1, ta

我有两个现有的表,除了主ID(一个
varchar
,而不是一个
int
)之外,都有不同的字段。我想创建第三个表,它本质上是这两个表的合并,这样对于给定的主键,所有字段都在一个表中


如何做到这一点?

如果您确定对于给定的主ID,两个表中都有一行且正好有一行,那么这应该可以:

SELECT
    tablea.field1, tablea.field2, tablea.field3, ... tablea.fieldn, <---- field list
    tableb.field1, tableb.field2, tableb.field3, ... tableb.fieldm  <---- field list
FROM
    tablea, tableb
WHERE
    tablea.primaryID = tableb.primaryID
选择
表A.field1、表A.field2、表A.field3。。。表a.fieldn,

要获取视图,请执行相同的操作,只是将“表”替换为“视图”。如果使用表而不是视图,请确保添加主键,因为默认情况下不会添加主键。

为什么要创建新表?为什么不在需要数据时执行查询呢?如果您只是在主键上连接两个表,那么大部分数据访问时间将用于将数据编组回应用程序。在加入桌子之前,你不会节省很多时间,而且你会占用很多空间。另外,您正在瞄准您的大脚趾,只是在等待第一次更新源表时忘记运行更新脚本来将更改复制到联接表中。重复数据是有害的,但有时是必要的。这听起来不像是那种情况。

对于MS SQL,请使用此选项

SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id

是否确实需要一个表(该表包含表中当前数据的快照,并且不会反映将来的更改)?你不是在寻找一个视图吗(它总是查看表中的当前数据)?Hi Bandi-t-这是一个好主意,事实上考虑一下,也许我不需要合并它们。但是,数据是相当静态的,大约每个月才会批量更新。如果选择一个表,DBMS只计算一次,不会跟踪源数据的更改。如果选择一个视图,DBMS会在每次有人查询该视图时进行计算,但它始终包含新数据。如果您必须对这个合并的数据执行许多查询(我想您的查询频率会比更新频率高),那么选择使用表可能非常值得。@Bandi-T-是的,查询频率会比更新频率高很多。然而,数据集比较大,因此可能会省去我的一些痛苦,并采用视图模型。是的,我会感觉更好——请参阅下面TMN的答案。当然,表的宽度和高度也会影响到这一点,以及您将进行何种查询。然后,我们甚至没有开始考虑添加索引来加快查询速度。是的,相当确定每个表中给定的PID只有一行。PID被设置为主键-如果有dupe,MySQL可能会在导入时呕吐?@Richard:是的,会。但是,要让上面的查询只给出一次所有行,还必须确保两个表中的行(记录)可以精确地1:1匹配。如果一个表中的主键为3,但另一个表中没有主键3,则结果中将没有包含该
3
的行,因为另一个表中没有匹配的
3
行。
SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id