合并2个mysql表数据库
我需要从合并2个mysql表数据库,mysql,select,merge,Mysql,Select,Merge,我需要从table1中选择所有,其中active=1并将t1cid、t2cid、L1cid、L2cid--L10cid替换为table2中相应的cid 我有两张桌子 表1列名 id name t1cid t2cid L1cid L2cid L3cid L4cid L5cid L6cid L7cid L8cid L9cid L10cid active 表2 cid ctype cname 我需要合并这两个表并生成如下输出: 最终表格 id name t1cname
table1
中选择所有,其中active=1
并将t1cid、t2cid、L1cid、L2cid--L10cid替换为table2
中相应的cid
我有两张桌子
表1列名
id
name
t1cid
t2cid
L1cid
L2cid
L3cid
L4cid
L5cid
L6cid
L7cid
L8cid
L9cid
L10cid
active
表2
cid
ctype
cname
我需要合并这两个表并生成如下输出:
最终表格
id
name
t1cname
t2cname
L1cname
L2cname
L3cname
L4cname
L5cname
L6cname
L7cname
L8cname
L9cname
L10cname
您可以将Table2
转换为Table1
多次,每列一次:
SELECT Table1.id,
Table1.name,
Table2_t1.cname AS t1cname,
Table2_t1.cname AS t2cname,
Table2_L1.cname AS L1cname,
Table2_L2.cname AS L2cname,
Table2_L3.cname AS L3cname,
Table2_L4.cname AS L4cname,
Table2_L5.cname AS L5cname,
Table2_L6.cname AS L6cname,
Table2_L7.cname AS L7cname,
Table2_L8.cname AS L8cname,
Table2_L9.cname AS L9cname,
Table2_L10.cname AS L10cname
FROM Table1
JOIN Table2 AS Table2_t1 ON Table2_t1.cid = Table1.t1cid
JOIN Table2 AS Table2_t2 ON Table2_t2.cid = Table1.t2cid
JOIN Table2 AS Table2_L1 ON Table2_L1.cid = Table1.L1cid
JOIN Table2 AS Table2_L2 ON Table2_L2.cid = Table1.L2cid
JOIN Table2 AS Table2_L3 ON Table2_L3.cid = Table1.L3cid
JOIN Table2 AS Table2_L4 ON Table2_L4.cid = Table1.L4cid
JOIN Table2 AS Table2_L5 ON Table2_L5.cid = Table1.L5cid
JOIN Table2 AS Table2_L6 ON Table2_L6.cid = Table1.L6cid
JOIN Table2 AS Table2_L7 ON Table2_L7.cid = Table1.L7cid
JOIN Table2 AS Table2_L8 ON Table2_L8.cid = Table1.L8cid
JOIN Table2 AS Table2_L9 ON Table2_L9.cid = Table1.L9cid
JOIN Table2 AS Table2_L10 ON Table2_L10.cid = Table1.L10cid
WHERE Table1.active = 1
或者,您也可以连接一次表,然后将结果分组:
SELECT Table1.id,
Table1.name,
MAX(IF(Table1.t1cid =Table2.cid, Table2.cname, NULL)) AS t1cname,
MAX(IF(Table1.t2cid =Table2.cid, Table2.cname, NULL)) AS t2cname,
MAX(IF(Table1.L1cid =Table2.cid, Table2.cname, NULL)) AS L1cname,
MAX(IF(Table1.L2cid =Table2.cid, Table2.cname, NULL)) AS L2cname,
MAX(IF(Table1.L3cid =Table2.cid, Table2.cname, NULL)) AS L3cname,
MAX(IF(Table1.L4cid =Table2.cid, Table2.cname, NULL)) AS L4cname,
MAX(IF(Table1.L5cid =Table2.cid, Table2.cname, NULL)) AS L5cname,
MAX(IF(Table1.L6cid =Table2.cid, Table2.cname, NULL)) AS L6cname,
MAX(IF(Table1.L7cid =Table2.cid, Table2.cname, NULL)) AS L7cname,
MAX(IF(Table1.L8cid =Table2.cid, Table2.cname, NULL)) AS L8cname,
MAX(IF(Table1.L9cid =Table2.cid, Table2.cname, NULL)) AS L9cname,
MAX(IF(Table1.L10cid=Table2.cid, Table2.cname, NULL)) AS L10cname
FROM Table1 JOIN Table2 ON Table2.cid IN (
Table1.t1cid,
Table1.t2cid,
Table1.L1cid,
Table1.L2cid,
Table1.L3cid,
Table1.L4cid,
Table1.L5cid,
Table1.L6cid,
Table1.L7cid,
Table1.L8cid,
Table1.L9cid,
Table1.L10cid
)
WHERE Table1.active = 1
GROUP BY Table1.id
我认为第一种解决方案应该更快,特别是如果您在表2.cid上有索引,并且表1中有外键列,那么也许值得对这两种方法进行基准测试,看看哪一种更好?您能告诉我们允许合并两个表的规则吗?了解。