MySQl更新列,其中包含特定格式的值

时间:2013-11-07 11:37:18

标签: mysql sql join

我正在研究一个旧的应用程序和mysql数据库,遗憾的是它有点混乱。

我对导出所需的列感兴趣,该列包含特定文档的编辑器名称。此列中的值应以特定方式进行格式化,并且应该与当前不一致。

文档可以包含许多编辑器。我有一个包含所有不同编辑器的表,我需要将其与当前(格式不正确的)编辑器值进行匹配。我知道这不是执行此操作的最佳方式(应用程序当前的工作方式)但我需要将编辑器列格式化如下:

"Surname, Initial. and Surname, Initial. and Surname, Initial"

E.g:

"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."

等...

以下是我目前的表格:

文档

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

Eitors

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

任何帮助/指示都将不胜感激,

1 个答案:

答案 0 :(得分:0)

没有“真正的”可靠方法来解决这个问题......我使用了一些基本的SQL来修复/匹配我能做的事情,然后手动完成。

谢谢, 乔恩。