我有一个表中包含以下类型的记录。我有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 |
请帮我写一下可以给我上述结果的查询。
感谢您的帮助。
答案 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)");
}
}
?>