Reputation: 1174
I need to select all from table1
where active=1
and replace t1cid,t2cid,L1cid,L2cid---L10cid
with corresponding name of cid
in table2
.
I have two tables like,
Table1 column names
id
name
t1cid
t2cid
L1cid
L2cid
L3cid
L4cid
L5cid
L6cid
L7cid
L8cid
L9cid
L10cid
active
Table2
cid
ctype
cname
I need to merge these two tables and produce the output like,
final table
id
name
t1cname
t2cname
L1cname
L2cname
L3cname
L4cname
L5cname
L6cname
L7cname
L8cname
L9cname
L10cname
Upvotes: 4
Views: 135
Reputation: 125865
You could join Table2
to Table1
multiple times, once for each column:
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
Or, alternatively, you could join the tables once and then group the results:
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
I think the first solution ought to be faster, especially if you have indexes on Table2.cid
and the foreign key columns in Table1
—but perhaps it's worth benchmarking the two approaches to see which is better?
Upvotes: 0