mysql将插入的数据附加到列

时间:2013-10-30 16:14:05

标签: mysql sql

我不确定这在sql中是否可行。

我有以下表格:

  • 包含列id和作者
  • 的“文档”
  • “authors”包含列id,initial和lastname
  • “authorships”包含列id,document_id和author_id

文件可以有多位作者。

我需要文档表中的authors列包含authors表中的姓氏和intial,格式相应:

“Bloggs,J。Doe,J。Punchclock,P。Botts,D。”等...

例如:

文件

| id  | title             | authors |
-------------------------------------
| 1   | Arms and the Man  |         |
| 2   | East of Eden      |         |
| 3   | If Not Now, When? |         |

作者

| id  | initial | lastname     |
--------------------------------
| 1   | J       | Bloggs       |
| 2   | J       | Doe          |
| 3   | P       | Punchclock   |
| 4   | D       | Botts        |

的著者

| id  | document_id  | author_id |
----------------------------------
| 1   | 1            | 1         |
| 2   | 1            | 2         |
| 3   | 1            | 3         |
| 4   | 2            | 3         |
| 5   | 2            | 4         |
| 6   | 3            | 1         |
| 7   | 3            | 3         |
| 8   | 3            | 4         |

我需要将文档表中的authors列更新为:

| id  | title             | authors                             |
-----------------------------------------------------------------
| 1   | Arms and the Man  | Bloggs, J. Doe, J. Punchclock, P.   |
| 2   | East of Eden      | Punchclock, P. Botts, D.            |
| 3   | If Not Now, When? | Bloggs, J. Punchclock, P. Botts, D. |

如果可能的话,我需要一个sql语句才能做到这一点 - 将多个值附加到一列?

1 个答案:

答案 0 :(得分:0)

使用concat连接lastname和initial,然后group_concat将多个结果放在一行。

select d.id, d.title, 
group_concat(concat(a.lastname,', ', a.initial, '.') 
             order by a.lastname, a.initial separator ' ') authors
from documents d
inner join authorships ash on ash.document_id = d.id
inner join authors a on ash.author_id = a.id
group by d.id, d.title

sqlFiddle