如何在具有相同列/字段名称的表上从联接结果轻松创建表

时间:2019-05-31 09:01:02

标签: mysql join

我正在尝试对具有相同架构的2个表进行联接:

public void Configure(EntityTypeBuilder<CostCenter> costCenterEntity)
{
    ...

    costCenterEntity.HasOptional(Owner)                    // The owner is optional
        .WithMany(owner => owner.CostCenters)  // the owner has zero or more CostCenters
        .HasForeignKey(costCenter => costCenter.OwnerId)
}

这行得通,直到我决定修改查询以保存它:

SELECT * FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

这会产生一个错误,指出存在重复的列。

两个表中都有一个主键。

我找到了一个解决方案,方法是对每个表中的每一列都使用别名:

CREATE TABLE `tableName` SELECT * FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

但是,这很乏味。如果每个表中有100多个列怎么办?有没有一种方法可以使此工作无需手动别名每个列名?我正在寻找使MySQL创建具有“ X.Y”格式列名的表的方法,其中X是原始表名,Y是原始字段名,但是任何其他解决方案也可以。

P.S .:如果不清楚,当我使用“ *”时,我需要两个表中的列,而不仅仅是一个。它们是两个具有不同数据但具有相同列名的不同表。 (顺便说一下,我不能更改名称。)

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作(我不明白为什么要创建一个似乎有两倍相同数据的第3个表):

CREATE TABLE `tableName` SELECT tl1.* FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

答案 1 :(得分:0)

首先,使用mysql workbench。您需要通过单击所需的方案,然后右键单击视图来创建以下view

它应该看起来像这样:

CREATE VIEW `schema`.`someView` (
    SELECT t1.* 
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

现在保存它,然后在“视图”选项卡中重新打开它,您应该看到以下内容:

CREATE VIEW `schema`.`someView` (
    SELECT 
    t1.col1,
    t1.col2,
    t1.col3,
    ...
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

现在,您可以为重复的列添加别名,然后添加t2.*以添加其余列

CREATE VIEW `schema`.`someView` (
    SELECT 
    t1.id as tl1_id,
    ...
    t2.*
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

这是我知道的最快方法。希望对您有所帮助。