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;
这个查询给了我想要的结果。
我有两个 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;
这个查询给了我想要的结果。