[英]Update multiple rows with corresponding values from another table MySQL
使用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;
但是,这给了我一个错误,该错误表示“查询返回多行”,是指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则没有编号。 我希望这可以澄清一下。
如果您在字段auto_patient_id
和folder_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.somefield
或THKON01.data.auto_patient_id = somefunction(werte.folder_id)
它将一次只选择一个记录,并更新属于外部where条件的所有记录。
更新
如果您想使用一些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脚本编写,因此该脚本可能无法正常工作,但我希望这个想法很明确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.