2012-06-26 6 views
3

table1 여기서 active=1을 선택하고 에 cid의 해당 이름을 가진 t1cid,t2cid,L1cid,L2cid---L10cid을 대체해야합니다. 내가 좋아하는 두 개의 테이블이merge 2 개의 mysql 테이블 데이터베이스

,

표 열 이름

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 — 인 경우 두 가지 방법 중 어느 것이 더 나은지 벤치마킹하는 것이 좋습니다.

관련 문제