gpt4 book ai didi

mysql - 需要根据对应的值制定UPDATE语句

转载 作者:行者123 更新时间:2023-11-29 04:16:57 24 4
gpt4 key购买 nike

我有一个如下所示的“关键”文件(基数顺序):

ID
Name
Job

然后我从错误的更新语句中得到一个编辑过的 bin.log,格式如下:

1
'Joe'
'Grocer'
2
'Bill'
'Mason'

我需要做的是使用对应的“key”文件,制定更新语句,结果如下:

update database.table set Name='Joe', Job='Grocer' WHERE ID=1;
update database.table set Name='Bill', Job='Mason' WHERE ID=2;

但是,这些需要适用于多列数据。 key 文件中的第一个字段将始终是单个主键。换句话说,更新语句中的“WHERE”子句将始终使用 key 文件中的这一行。 key 文件中第一行下的所有内容都是需要按出现顺序“设置”的列。

对于这个例子,ID将是WHERE子句中的列,'Name'将首先设置到bin.log中的相应行,然后是'Job'等等,而这个例子只有 key 文件中的三行,可以有任意行数。但是,第一行始终是用于更新语句结尾“WHERE”部分的列。

最佳答案

awk '
NR==FNR { a[++m]=$0; next }
{
n = ((FNR-1) % m) + 1
v[n] = $0
}
n == m {
printf "update database.table set %s=%s, %s=%s WHERE %s=%s;\n", a[2], v[2], a[3], v[3], a[1], v[1]
}
' file bin.log
update database.table set Name='Joe', Job='Grocer' WHERE ID=1;
update database.table set Name='Bill', Job='Mason' WHERE ID=2;

如果你的问题真的是as @blackpen guessed那么使其工作的调整将是:

$ cat tst.awk
NR==FNR { a[++m]=$0; next }
{
n = ((FNR-1) % m) + 1
v[n] = $0
}
n == m {
printf "update database.table set"
for(i=2; i<=n; i++) {
printf "%s %s=%s", (i>2 ? "," : ""), a[i], v[i]
}
printf " WHERE %s=%s;\n", a[1], v[1]
}

$ awk -f tst.awk file bin.log
update database.table set Name='Joe', Job='Grocer' WHERE ID=1;
update database.table set Name='Bill', Job='Mason' WHERE ID=2;

关于mysql - 需要根据对应的值制定UPDATE语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com