2012-06-26 196 views
3

我需要從table1中選擇全部,其中active=1table2中的對應名稱cid替換t1cid,t2cid,L1cid,L2cid---L10cid合併2個mysql表數據庫

我有兩個表像,

表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 
+0

你能告訴我們兩個表能夠合併的規則嗎? –

+2

瞭解[SQL連接](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)。 – eggyal

回答

0

你可以joinTable2Table1多次,一次爲每個列:

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 —,但也許有必要對兩種方法進行基準比較,看看哪個更好?