我有一个名为week1
的数据库,其中包含列:age, address, voternum, voterhistory, status, gender, precinct, county, and zip5
。
表中已包含除voterhistory
之外的所有行的信息!
我需要将voterhistory
列与名为vhist的文本文件分别导入到表中,其中第1周表的voternum
等于vhist文本文件的voternum
。
文本文件中的多行可以放在voterhistory
列中,并且应该用逗号分隔。
例如:
在第1周内,有一个人患有voternum = 1234
在vhist文本文件中,有3条记录,其中voternum = 1234
。
一个有一个voterhistory = 2011
,一个有voterhistory = 2012
,还有一个有voterhistory = 2013
。
这意味着当导入vhist文本文件时,这3条记录应该导入到week1表的voterhistory
列中,如下所示:2011, 2012, 2013
。
如果这听起来令人困惑,很抱歉,但这是我知道如何解释的唯一方法。如果你需要更多信息,请告诉我。
在MySQL中,我们有一个名为CONCAT_WS()的函数,它基本上使用指定的分隔符连接字符串值。看看链接。
我会使用一个临时表将vhist加载到内存中。然后将表week1连接到临时表vhistory,并根据密钥匹配更新week1。这使您不必在SQL联接中实现条件逻辑。
在代码中,它看起来像这样,你可能需要做一些工作才能运行它:
CREATE TEMPORARY TABLE vhistory (
voternum VARCHAR(10) NOT NULL
, voterhistory VARCHAR(10)
);
LOAD DATA LOCAL INFILE '/path/vhist.txt' INTO TABLE vhistory;
UPDATE week1 SET voterhistory=SELECT CONCAT_WS(SELECT ',',voterhistory FROM vhistory
WHERE week1-voternum = vhistory-voternum );
我没有运行此代码,因为我没有您的数据。