2011-03-11 30 views
0

刪除列,我有很多的INSERT指令的大SQL文件(〜200MB):在SQL文件

insert into `films_genres` 
    (`id`,`film_id`,`genre_id`,`num`) 
    values 
    (1,1,1,1), 
    (2,1,17,2), 
    (3,2,1,1), 
    ... 

我怎麼能刪除或忽略列id,在腳本num

回答

2

最簡單的方法可能是將全部插入到臨時保存表中,然後將所需的列插入到保存表中的實際表中。

insert into `films_genres_temp` 
    (`id`,`film_id`,`genre_id`,`num`) 
    values 
    (1,1,1,1), 
    (2,1,17,2), 
    (3,2,1,1), 
    ... 

insert into `films_genres` 
    (`film_id`,`genre_id`) 
    select `film_id`,`genre_id` 
     from `films_genres_temp` 
0

這Perl的一個班輪應該這樣做:

perl -p -i.bak -e 's/\([^,]+,/\(/g; s/,[^,]+\)/\)/g' sqlfile 

它編輯而不是文件,而是創建一個帶有擴展名.bak的備份副本。

或者如果你喜歡紅寶石:

ruby -p -i.bak -e 'gsub(/\([^,]+,/, "("); gsub/, ")");' sqlfile 
+0

+1最快和最簡單的方法(看,不用數據庫)。 – sln 2011-03-12 00:21:20

+1

除OP似乎更喜歡使用Ruby。 – 2011-03-12 05:19:50

+0

注意到;添加了一個紅寶石單線版本。 – 2011-03-12 10:11:27

0

CREATE TABLE #MyTempTable(ID INT,film_id SMALLINT,genre_id INT,NUM整數)

INSERT INTO #MyTempTable(idfilm_idgenre_idnum
[Data goes here]

insert into films_genres(film_idgenre_id)select film_idgenre_id從#MyTempTable

DROP TABLE #MyTempTable