0

所以我不是很擅长复杂的 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...

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

4

2 回答 2

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

于 2012-09-11T19:49:19.083 回答
0

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

select m.*, n.title, v.title from MainTable m join AttrTable a on a.mainId = m.id join NameTable n on n.id = a.nameId join ValueTable v on v.id = a.valueId

于 2012-09-11T19:47:19.660 回答