4

table1whereからすべてを選択し、 in の対応する名前に置き換える必要がありactive=1ます。t1cid,t2cid,L1cid,L2cid---L10cidcidtable2

次のような2つのテーブルがあります。

Table1 列名

id
name
t1cid
t2cid
L1cid
L2cid
L3cid
L4cid
L5cid
L6cid
L7cid
L8cid
L9cid
L10cid
active

表2

cid       
ctype    
cname

これら 2 つのテーブルをマージして、次のような出力を生成する必要があります。

ファイナルテーブル

id  
name 
t1cname  
t2cname 
L1cname  
L2cname  
L3cname  
L4cname 
L5cname 
L6cname
L7cname 
L8cname 
L9cname 
L10cname
4

1 に答える 1

0

列ごとに 1 回、複数回参加でき ます。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どちらが優れているかを確認するために 2 つのアプローチをベンチマークする価値はあるでしょうか?

于 2012-06-26T04:50:30.187 に答える