每行删除重复的MySQL

时间:2016-08-29 13:01:03

标签: mysql

我有一张看起来像这样的表

| Domain | Owner   | Nameservers         |
__________________________________________
| Test1  | Person1 | Serv1, Serv2, Serv3 |
| Test2  | Person2 | Serv1               |
| Test3  | Person3 | Serv1, Serv2        |

我的计划是将名称服务器拆分为自己的列。 (我需要这个结构进一步导入第三方系统)..

| Domain | Owner   | Nameserver1 | Nameserver2 | Namerserver3 |
_______________________________________________________________
| Test1  | Person1 | Serv1       | Serv2       | Serv 3       |
| Test2  | Person2 | Serv1       |             |              |
| Test3  | Person3 | Serv1       | Serv2       |              |

表中的空格可以是空字符串或NULL。

我尝试过以下查询:

CREATE TABLE temp_import_table AS
  SELECT domain, 
         owner, 
         SUBSTRING_INDEX( `nameservers` , ',', 1 ) AS nameserver1,
         SUBSTRING_INDEX(SUBSTRING_INDEX( `nameservers` , ',', 2 ),',',-1) AS nameserver2, 
         SUBSTRING_INDEX( `nameservers` , ',', -1 ) AS nameserver3

但不知怎的,我得到以下结果:

| Domain | Owner   | Nameserver1 | Nameserver2 | Namerserver3 |
_______________________________________________________________
| Test1  | Person1 | Serv1       | Serv2       | Serv3        |
| Test2  | Person2 | Serv1       | Serv1       | Serv1        |
| Test3  | Person3 | Serv1       | Serv2       | Serv2        |

正如您所看到的那样,名称服务器正在填充"之前的"即使名称服务器在csv字段中为空,也是如此。任何人都可以帮我摆脱/清空每行的重复值吗?

2 个答案:

答案 0 :(得分:0)

更好的解决方案是放弃这个插件,但只是为了好玩......

SELECT * FROM my_table;
+--------+---------+--------------+
| Domain | Owner   | Nameservers  |
+--------+---------+--------------+
| Test2  | Person2 | Serv1        |
| Test3  | Person3 | Serv1, Serv2 |
+--------+---------+--------------+

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT DISTINCT domain
              , owner
              , TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(nameservers,',',i+1),',',-1)) x 
           FROM my_table
              , ints;

+--------+---------+-------+
| domain | owner   | x     |
+--------+---------+-------+
| Test2  | Person2 | Serv1 |
| Test3  | Person3 | Serv1 |
| Test3  | Person3 | Serv2 |
+--------+---------+-------+

答案 1 :(得分:0)

您可以计算多少','在SELECT domain, owner, SUBSTRING_INDEX( `nameservers` , ',', 1 ) AS nameserver1, IF( LENGTH(`nameservers`)-LENGTH(REPLACE(`nameservers`,',',''))>0, SUBSTRING_INDEX(SUBSTRING_INDEX( `nameservers` , ',', 2 ),',',-1), '' )AS nameserver2, IF( LENGTH(`nameservers`)-LENGTH(REPLACE(`nameservers`,',',''))>1, SUBSTRING_INDEX( `nameservers` , ',', -1 ), '' ) AS nameserver3 中,然后使用if将其分开。

var re = /(bob)/gi; 
var str = 'Hey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\n';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}