提问人:Ebrahim Amini Sharifi 提问时间:8/1/2023 最后编辑:Ebrahim Amini Sharifi 更新时间:8/2/2023 访问量:38
对更新查询使用 Join,更新行而不是列
Using Join on an update query, updating on rows rather than columns
问:
我需要一个查询来实现第二个表结果,如果可能的话,请在SQL SERVER和MYSQL数据库中描述 我想将 meta_key 是 bankaccount 的行meta_value与 meta_key 是 iban 的行的相应meta_value更新。
更新前(原文):example_table
document_id | meta_key | meta_value |
---|---|---|
1 | 伊班 | IBAN123456 |
1 | 银行账户 | ACCT987654 |
2 | 伊班 | IBAN555555 |
2 | 银行账户 | ACCT444444 |
3 | 伊班 | IBAN888888 |
3 | 银行账户 | ACCT333333 |
运行 SQL 更新查询后:
document_id | meta_key | meta_value |
---|---|---|
1 | 伊班 | IBAN123456 |
1 | 银行账户 | IBAN123456 |
2 | 伊班 | IBAN555555 |
2 | 银行账户 | IBAN555555 |
3 | 伊班 | IBAN888888 |
3 | 银行账户 | IBAN888888 |
答:
0赞
Ebrahim Amini Sharifi
8/1/2023
#1
您希望将 where is 的行更新为对应的 from 行 where is 。meta_value
meta_key
bankaccount
meta_value
meta_key
iban
下面是一个用于实现此目的的 SQL 查询 - MySQL:
UPDATE example_table AS p1
INNER JOIN (
SELECT document_id, meta_value AS iban
FROM example_table
WHERE meta_key = 'iban'
) AS p2 ON p1.document_id = p2.document_id
SET p1.meta_value = p2.iban
WHERE p1.meta_key = 'bankaccount';
SQL Server:
UPDATE p1
SET p1.meta_value = p2.iban
FROM example_table AS p1
INNER JOIN (
SELECT document_id, meta_value AS iban
FROM example_table
WHERE meta_key = 'iban'
) AS p2 ON p1.document_id = p2.document_id
WHERE p1.meta_key = 'bankaccount';
解释:
- 该表是 的别名,也是子查询的别名。
p1
example_table
p2
- 子查询选择 和 其中 是 。
document_id
meta_value
meta_key
'iban'
- 主查询使用 to match between 和 subquery 。
INNER JOIN
document_id
p1
p2
- 然后,它使用 from where is 进行更新。
meta_value
p1
iban
p2
meta_key
'bankaccount'
请记住在运行任何更新查询之前备份数据库,并首先在安全的环境中对其进行测试!
评论