我正在研究一个旧的应用程序和 mysql 数据库,遗憾的是它有点乱。
我对包含特定文档编辑者姓名的导出所需的列感兴趣。此列中的值应以特定方式格式化,并且应与当前不一致。
一个文档可以有多个编辑器。我有一个包含所有不同编辑器的表,我需要将这些编辑器与当前(格式不正确)的编辑器值相匹配。我知道这不是执行此操作的最佳方法(这是应用程序当前的工作方式),但我需要将 editors 列格式化如下:
"Surname, Initial. and Surname, Initial. and Surname, Initial"
例如:
"Bloggs, J. and Doe, J."
"Smith, M.J. and Bloggs, J. and Jones, P"
"Williams, S. and Smith, M.J. Doe, J."
但是,该列当前与没有真正的格式不一致:
"J Bloggs, J Doe"
"MJ Smith, J Bloggs and P Jones"
"Williams, S, M.J Smith. Doe, J."
ETC...
这是我当前的表格:
文件:
| title | editors |
------------------------------------------------
| doc title 1 | J Bloggs, J Doe |
| doc title 2 | M Smith, J Bloggs and P Jones |
| doc title 3 | Williams, S, M Smith. Doe, J. |
编辑器:
| initial | name |
------------------------
| J. | Bloggs |
| J. | Doe |
| M.J. | Smith |
| P. | Jones |
| S. | Williams |
出于测试目的,我在 Documents 表中添加了一个列 (formatted_editors):
| title | editors | formatted_editors |
---------------------------------------------------------------------------------
我需要看起来像这样:
| title | editors | formatted_editors |
---------------------------------------------------------------------------------
| doc title 1 | J Bloggs, J Doe | Bloggs, J. and Doe, J.
| doc title 2 | M Smith, J Bloggs and P Jones | Smith, M.J. and Bloggs, J. and Jones, P
| doc title 3 | Williams, S, M Smith. Doe, J. | Williams, S. and Smith, M.J. Doe, J.
我已经尝试了以下(以及其他各种),但似乎没有任何运气 - 我认为这可能与我的分组有关?
SELECT d. title, d.editors, group_concat(e.name, ', ', e.initial SEPARATOR ' and ') as formatted_editors
FROM documents d
INNER JOIN editors e
ON d.editors LIKE concat('%', e.name, '%')
WHERE d.editors LIKE concat('%', e.name, '%')
and et.editors LIKE concat('%', e.initial, '%')
GROUP BY et.editors;
任何帮助/指针将不胜感激,