0

これがSQLで可能かどうかはわかりません。

次のテーブルがあります。

  • 列 ID と作成者を含む「ドキュメント」
  • id、initial、lastname の列を含む「authors」
  • 列 id、document_id、author_id を含む「authorships」

ドキュメントには複数の作成者を含めることができます。

ドキュメント テーブルの author 列に、authors テーブルの姓とイニシャルを、それに応じて書式設定して含める必要があります。

「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         |

ドキュメント テーブルの author 列を次のように更新する必要があります。

| 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つの列に複数の値を追加しますか?

4

1 に答える 1

0

concatを使用して姓とイニシャルを連結し、次にgroup_concatを使用して複数の結果を 1 行にまとめます。

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

于 2013-10-30T16:21:19.793 に答える