2016-08-29 106 views
3

我有一個表,看起來像這樣每行刪除重複的MySQL

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

我的計劃是域名服務器分割成自己的colums。 (我需要這個結構進一步導入到第三方系統)..

| 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字段中是空的。任何人都可以幫我擺脫/清空每行的重複值?

+4

不,不,不,不。使用單獨的表來存儲域名和名稱服務器之間的關係。 –

+0

在使用MySQL查詢中爆炸CSV非常複雜。你應該擺脫那個CSV,而是有一個單一的記錄名稱服務器和另一邊的關係。 –

+0

我知道結構是可怕的,完全違反規則,但我無法做任何事情,由於第三方系統:(:(這是一個稱爲強大的wordpress插件) – malen

回答

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 | 
+--------+---------+-------+ 
0

你可以指望有多少「」在nameservers,然後使用,如果分開了。

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