MySQL :使两个 table 数据与给定列和相同数据合并

MySQL : Making two table data merge with the given column and same data

我有两个 table 的数据。该列如下所示:

b_1,b_2,b_3,rule,name

其他 table 列是:

rule,name,a_1,a_2,a_3

我想要的结果 table 是:

b_1,b_2,b_3,rule,name,a_1,a_2,a_3

示例数据:

b_1,b_2,b_3,rule,name
ab,sd,ed,mine,abhi
gh,jk,ka,nice,sid

rule,name,a_1,a_2,a_3
mine,abhi,qw,er,rt
nice,sid,zx,zx,cv

我需要的结果数据是:

b_1,b_2,b_3,rule,name,a_1,a_2,a_3
ab,sd,ed,mine,abhi,qw,er,rt 
gh,jk,ka,nice,sid,zx,zx,cv

我试过这个查询:

Select b_1,b_2,b_3,b.rule,b.name,a_1,a_2,a_3 from T1 a INNER JOIN T2 b ON b.rule=a.rule and b.name=a.name;

Select b_1,b_2,b_3,b.rule,b.name,a_1,a_2,a_3 from T1 a LEFT JOIN T2 b ON b.rule=a.rule and b.name=a.name;

P.S:

Table T1 有 31465 行。

Table T2 有 31465 行。

所以即使 Table T3 也应该包含 31465 行。

两个 table 都有多余的行。

如有任何帮助,我们将不胜感激。

有两个条件

1)如果两个table有N-M的关系(意思是table1的每一项在table2中有M项,table中的每一项]2 在 table1)

中有 N 个项目

2) 如果两个 table 有 1-M 的关系(意味着 table1 的每个项目在 table2 中有 M 个项目并且 table2 在 table1)

中有 1 个项目

在情况 1 中,您必须使用两个 table 的组合列来创建另一个 table,在您的情况下,它是规则、名称,例如我们称之为 jointable ,那么 table 就像

table1(a1,a2,a3,rule,name)==>主键(rule,name)

jointable(rule,name) ==> primary key(rule,name)

table2(b1,b2,b3,rule,name) ==>主键(rule,name)

并且 select 语句将是

select table1.a1 ,table1.a2 ,table1.a3,table1.name,table1.rule,table2.b1,table2.b2,table2.b3
from jointable 
join table1 on table1.rule = jointable.rule and table1.name = jointable.name
join table2 on table2.rule = jointable.rule and table2.name = jointable.name

在情况 2 中,一个 table 包含主键(如 table1 中的规则和名称),另一个 table(如 table2)包含外键引用父 table 主键,在本例中是 table1 的规则名称(请注意,table 1 是父项,子项是 table 2 不能包含父级没有的值)

所以 tables 会像:

table1(a1,a2,a3,rule,name) ==>主键(rule,name)

table2(b1,b2,b3,rule,name) ==>外键(rule,name)引用table1(rule,name)

和 select 语句就像:

select table1.a1 ,table1.a2 ,table1.a3,table1.name,table1.rule,table2.b1,table2.b2,table2.b3
  from table1 join table2 on table1.name=table2.name and table1.rule=table2.rule

对我有用的答案是我必须为 table 的每一行添加一个唯一标识符。列规则和名称对于两个 tables 都是通用的,但都有冗余条目,我想保留冗余数据所以我用新的 id 列更新了我的 tables。

T1:

id,b_1,b_2,b_3,rule,name

T2:

id,rule,name,a_1,a_2,a_3

id 列不是 NULL 并且自动递增。

现在我有一个通用的唯一列,通过它我可以加入 table。

Select b.b_1, b.b_2, b.b_3, rule, name, a.a_1, a.a_2, a.a_3 from T1 b INNER JOIN T2 a ON b.id=a.id;

这个查询给了我想要的结果。