4

我需要从table1where中选择所有active=1并替换为int1cid,t2cid,L1cid,L2cid---L10cid的相应名称。cidtable2

我有两张桌子,

表 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
4

1 回答 1

0

您可以加入 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

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

于 2012-06-26T04:50:30.187 回答