将表组合到单个表中的MySQL语句
所以我并不擅长复杂的MySQL语句,所以我希望你们能帮助我 假设我有四个表,MainTable、AttrTable、NameTable和ValueTable MainTable如下所示:将表组合到单个表中的MySQL语句,mysql,Mysql,所以我并不擅长复杂的MySQL语句,所以我希望你们能帮助我 假设我有四个表,MainTable、AttrTable、NameTable和ValueTable MainTable如下所示: | id | title | category | ......................... | 1 | First | Cat1 | ......................... | 2 | Second| Cat2 | .........................
| id | title | category |
.........................
| 1 | First | Cat1 |
.........................
| 2 | Second| Cat2 |
.........................
| 3 | Third | Cat3 |
| id | mainId | nameId | valueId |
..................................
| 1 | 1 | 1 | 2 |
..................................
| 2 | 1 | 2 | 1 |
..................................
| 3 | 2 | 1 | 3 |
..................................
| 4 | 3 | 3 | 2 |
..................................
| 1 | 3 | 1 | 1 |
| id | title | | id | title |
.............. ..............
| 1 | foo | | 1 | bar |
.............. ..............
| 2 | john | | 2 | smith |
.............. ..............
| 3 | dink | | 3 | fink |
AttrTable如下所示:
| id | title | category |
.........................
| 1 | First | Cat1 |
.........................
| 2 | Second| Cat2 |
.........................
| 3 | Third | Cat3 |
| id | mainId | nameId | valueId |
..................................
| 1 | 1 | 1 | 2 |
..................................
| 2 | 1 | 2 | 1 |
..................................
| 3 | 2 | 1 | 3 |
..................................
| 4 | 3 | 3 | 2 |
..................................
| 1 | 3 | 1 | 1 |
| id | title | | id | title |
.............. ..............
| 1 | foo | | 1 | bar |
.............. ..............
| 2 | john | | 2 | smith |
.............. ..............
| 3 | dink | | 3 | fink |
NameTable和ValueTable分别如下所示:
| id | title | category |
.........................
| 1 | First | Cat1 |
.........................
| 2 | Second| Cat2 |
.........................
| 3 | Third | Cat3 |
| id | mainId | nameId | valueId |
..................................
| 1 | 1 | 1 | 2 |
..................................
| 2 | 1 | 2 | 1 |
..................................
| 3 | 2 | 1 | 3 |
..................................
| 4 | 3 | 3 | 2 |
..................................
| 1 | 3 | 1 | 1 |
| 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...
可能吗?我甚至会满足于这样的事情:
| 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...
希望这一切都有意义。提前感谢您的帮助。查询未选中!(可能需要调整)
从主表m中选择m.*、n.title、v.title
在a.mainId=m.id上连接表a
n.id=a.nameId上的联接名称表n
未选中v.id=a.valueId查询上的联接值表v!(可能需要调整)
从主表m中选择m.*、n.title、v.title
在a.mainId=m.id上连接表a
n.id=a.nameId上的联接名称表n
在v.id=a.valueId上连接ValueTable v听起来您只是想要这样:
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
看听起来你只是想要这个:
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
看,这很有效!但我忘了在我的问题中提到,我还想显示MainTable中没有任何行的行。i、 e.我仍然希望看到MainTable中的第3行,即使它不在AttrtTable中。@gordon您可以将第一个联接更改为
左联接
,而不是内部联接
。然后,如果attr
表为空,您将获得记录。这非常有效!但我忘了在我的问题中提到,我还想显示MainTable中没有任何行的行。i、 e.我仍然希望看到MainTable中的第3行,即使它不在AttrtTable中。@gordon您可以将第一个联接更改为左联接
,而不是内部联接
。然后,如果attr
表为空,您将获得记录。