所以我并不是很擅长复杂的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...
希望这一切都有道理。提前感谢您的帮助。
答案 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
答案 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