我正在尝试对具有相同架构的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 .:如果不清楚,当我使用“ *”时,我需要两个表中的列,而不仅仅是一个。它们是两个具有不同数据但具有相同列名的不同表。 (顺便说一下,我不能更改名称。)
答案 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)
)
这是我知道的最快方法。希望对您有所帮助。