2011-02-03 197 views
6

我有一张表格,里面有下列种类的记录。我有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

我假设你需要这个只是一次性操作,以便将架构重构为可用的东西。

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

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

这工作完美。非常感谢。希望欧普将此标记为答案:) – 2011-07-22 12:36:03

2

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

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)"); 
    } 
} 
?>