2011-09-19 29 views
2

说我有如下表:MySQL:如何透视?

TABLE: foo 
- foo_id (PK) 
- foo_value 

Table: bar 
- bar_id (PK) 
- foo_id (FK) 
- var_value 

有一到foobar之间一对多的关系。我如何查询这个,以便得到如下结果:

1, `foo`.`value`, `bar`.`value1` 
2, `foo`.`value`, `bar`.`value1`, `bar`.`value2` 
3, `foo`.`value`, `bar`.`value1`, `bar`.`value2`, `bar`.`value3` 
4, `foo`.`value`, `bar`.`value1`, `bar`.`value2`, `bar`.`value3` .... and so on 

回答

0

简短的回答是,你不能。

较长的答案是,你可以这样做:

SELECT foo.foo_id, foo_value, GROUP_CONCAT(var_value ORDER BY bar_id) 
FROM foo, bar 
WHERE bar.foo_id=bar.foo_id 
GROUP BY foo.foo_id, foo_value 

但是你的例子架构没有做出很大的意义。考虑而不是在那里的酒吧总是有一个indentifiable核心,集,说4个记录,每个FOO记录,那么酒吧看起来是这样的:

  • bar_id
  • foo_id
  • bar_type
  • bar_value

然后,你可以这样做:

SELECT foo_id, foo_value, 
(SELECT b1.var_value 
FROM bar b1 
WHERE b1.type=1), 
(SELECT b2.var_value 
FROM bar b2 
WHERE b1.type=2), 
(SELECT b3.var_value 
FROM bar b3 
WHERE b1.type=3), 
(SELECT b4.var_value 
FROM bar b4 
WHERE b4.type=4) 
FROM foo