合并2个mysql表数据库

时间:2012-06-26 04:25:42

标签: mysql select merge

我需要从table1 active=1中选择所有内容,并将t1cid,t2cid,L1cid,L2cid---L10cid替换为cid中相应名称table2

我有两张桌子,

表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

1 个答案:

答案 0 :(得分:0)

您可以多次join Table2Table1,每列一次:

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

我认为第一个解决方案应该更快,特别是如果Table2.cid上的索引和Table1中的外键列 - 但也许值得对两种方法进行基准测试,看哪哪个更好?