将表组合成单个表的MySQL语句

时间:2012-09-11 19:42:47

标签: mysql

所以我并不是很擅长复杂的MySQL陈述,所以我希望你们可以帮助我。

假设我有四个表,MainTable,AttrTable,NameTable和ValueTable。

MainTable看起来像这样:

| id | title | category |
.........................
| 1  | First | Cat1     |
.........................
| 2  | Second| Cat2     |
.........................
| 3  | Third | Cat3     |

AttrTable看起来像这样:

| id | mainId | nameId | valueId |
..................................
| 1  | 1      | 1      | 2       |
..................................
| 2  | 1      | 2      | 1       |
..................................
| 3  | 2      | 1      | 3       |
..................................
| 4  | 3      | 3      | 2       |
..................................
| 1  | 3      | 1      | 1       |

NameTable和ValueTable都是这样的:

| id | title |           | id | title |
..............           ..............
| 1  | foo   |           | 1  | bar   |
..............           ..............
| 2  | john  |           | 2  | smith |
..............           ..............
| 3  | dink  |           | 3  | fink  |

所以我想编写一个语句,将与MainTable的每一行相关的所有数据组合到自己的行中。例如:我想要一个能让我回复的陈述:

| 1 | First | Cat1 | foo | smith | john | bar |
| 2 | Second| Cat2 | foo | fink  |
etc...

这可能吗?我甚至会满足于:

| 1 | First  | Cat1 | foo  | smith |
| 1 | First  | Cat1 | john | bar   |
| 2 | Second | Cat2 | foo  | fink  |
etc...

希望这一切都有道理。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

听起来你只想要这个:

select m.id,
    m.title,
    m.category,
    n.title,
    v.title
from maintable m
left join attrtable a
    on m.id = a.mainid
left join nametable n
    on a.nameid = n.id
left join valuetable v
    on a.valueid = v.id

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

查询未检查! (可能需要调整)

从MainTable m中选择m。*,n.title,v.title 在a.mainId = m.id上加入AttrTable a 在n.id = a.nameId上加入NameTable n 在v.id = a.valueId

上加入ValueTable v