使用另一个表MySQL中的相应值更新多行

时间:2014-01-06 11:27:00

标签: mysql sql csv import-from-csv

使用MySQL,我正在编写一个将从CSV文件导入数据的脚本。我已经完成了为单个用户导入数据的脚本,但是我想现在扩展到所有用户。我目前的陈述如下:

UPDATE werte 
    SET werte=(SELECT Date_Enrollment 
               FROM THKON01.data 
               WHERE auto_patient_id = 1020)
    WHERE folder_id = 1525 
    AND number=4;

现在我想要的是使用所有用户的注册日期(所以我将省略“WHERE auto_patient_id ...”语句)并将它们插入到所有相应的行中。这就是问题所在。我用声明

一次尝试了两个用户
UPDATE werte 
    SET werte=(SELECT Date_Enrollment 
               FROM THKON01.data 
               WHERE auto_patient_id = 1020
                   OR auto_patient_id = 1051)
    WHERE folder_id between 1524 AND 1525 
    AND number=4;

然而,这给了我一个错误,说“Query返回多行”,指的是SELECT Date_Enrollment的内部查询。 请注意,auto_patient_id不是按顺序编号的,所以我不能在那里使用“之间”。

编辑:澄清

我有两张桌子。一,werte,是我想要存储值的地方。 THKON01.data是我想要读取值的表。在这个例子的情况下,我希望将Date_Enrollment值写入werte表。假设我有3个用户要执行此操作,那么THKON01.data的结构如下所示:

auto_patient_id    Date_Enrollment
1020               01.01.1911
1050               02.01.1912
1073               03.01.1913
...                ...

现在我想将它插入到werte表中,如下所示:

folder_id    werte
1525         <empty>
1526         <empty>
1527         <empty>
...          ...

我希望它们被插入,以便THKON01.data(01.01.1911)的第一个值被复制到werte中的第一个值(folder_id 1525的字段),第二个(02.01.1912)到达第二个( folder_id 1526),等等。 Folder_id按顺序编号,auto_patient_id不按顺序编号。我希望能澄清一点。

1 个答案:

答案 0 :(得分:2)

如果字段auto_patient_idfolder_id之间有某些链接,您可以尝试这样的内容

UPDATE werte 
SET werte=(SELECT Date_Enrollment 
           FROM THKON01.data 
           WHERE (your_link))
WHERE number=4;

此处your_link可以是THKON01.data.auto_patient_id = werte.somefieldTHKON01.data.auto_patient_id = somefunction(werte.folder_id)

它一次只能选择一条记录,并更新所有属于外部条件的记录。

<强>更新

如果你想使用一些bash脚本,你可以像这样使用smth

$folder_id = 1 # or some other start number
mysql -e "SELECT Date_Enrollment FROM THKON01.data" | while read Date_Enrollment; do
   mysql -e "update werte set werte = $Date_Enrollment where folder_id = $folder_id"
   $folder_id = $folder_id + 1
done

你说你的文件夹ID是有序的,所以我们每次只能添加1而不是从结果中提取它们。

我绝对不熟悉bash脚本,所以这个脚本可能无法正常工作,但我希望这个想法很明确。