在MYSQL中重新映射行

时间:2013-11-17 15:25:52

标签: mysql remap

我有这样的表:

uid | fid | value
1   | 1   | nameOf1
1   | 2   | surnameOf1
1   | 3   | countryOf1
2   | 1   | nameOf2
2   | 2   | surnameOf2

需要像这样转换/选择它:

uid | name    | surname    | country
1   | nameOf1 | surnameOf1 | countryOf1
2   | nameOf2 | surnameOf2 | ..

2 个答案:

答案 0 :(得分:1)

尝试类似:

SELECT t1.uid, t2.value AS name, t3.value AS surname, t4.value AS country FROM table t1
  LEFT JOIN table t2 on t2.uid = t1.uid AND t2.fid = 1
  LEFT JOIN table t3 on t3.uid = t1.uid AND t3.fid = 2
  LEFT JOIN table t4 on t4.uid = t1.uid AND t4.fid = 3
  GROUP BY t1.uid;

或:

SELECT DISTINCT t1.uid, t2.value AS name, t3.value AS surname, t4.value AS country FROM table t1
  LEFT JOIN table t2 on t2.uid = t1.uid AND t2.fid = 1
  LEFT JOIN table t3 on t3.uid = t1.uid AND t3.fid = 2
  LEFT JOIN table t4 on t4.uid = t1.uid AND t4.fid = 3;

答案 1 :(得分:0)

这有点复杂,但你可以这样做:

select distinct uid as uid,
   (select value from dataTable as table1 
           where table1.uid=dataTable.uid and fid = 1) as name,
   (select value from dataTable as table2 
           where table2.uid=dataTable.uid and fid = 2) as surname,
   (select value from dataTable as table3 
           where table3.uid=dataTable.uid and fid = 3) as country
from dataTable group by uid

SQLFiddle