逗号分隔值分离

时间:2011-02-03 19:53:11

标签: mysql

我有一个表中包含以下类型的记录。我有Salesman和相关的帐号(以逗号分隔)。

+----------+----------+
| Salesman | Acct     |
+----------+----------+
| Ron      | 1,2,3,4  |
| Kin      | 6,7,8    |
| Joe      | 10,23,45 |

I am looking for output some thing like,

+----------+----------+
| Salesman | Acct     |
+----------+----------+
| Ron      | 1        |
| Ron      | 2        |
| Ron      | 3        |

请帮我写一下可以给我上述结果的查询。

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

我认为你需要这个作为一次性操作,以便将你的模式重构为可用的模式。

您是否有另一张表格列出了所有可能的帐号?如果你这样做,你可以这样做:

SELECT salesman, a.Acct
FROM account AS a
JOIN salesman_account AS sa
ON FIND_IN_SET(a.Acct, sa.Acct)

答案 1 :(得分:3)

您可以使用存储过程执行此操作。有关示例可以解决您的问题,请参阅http://kedar.nitty-witty.com/blog/mysql-stored-procedure-split-delimited-string-into-rows

答案 2 :(得分:2)

如果是一次性操作,那么使用任何支持语言进行处理可能更容易。 Python或PHP在开发此类脚本方面非常快。

答案 3 :(得分:1)

这是一件非常困难的事情。

我假设您正在规范您的数据库。如果没有,你真的应该。

如果我是你,我会编写一个脚本来规范化表格。接下来是php中的示例(可能包含错误):

<?php
$res = mysql_query('SELECT Salesman, Acct FROM table');
while ($obj = mysql_fetch_object($res)) {
  $values = explode(',', $obj->Acct);
  foreach ($values as $value) {
    mysql_query("INSERT INTO new_table (Salesman, Acct) VALUES ('$obj->Salesman', $value)");
  }
}
?>