gpt4 book ai didi

MySQL UPDATE 与同一张表的 SUBQUERY

转载 作者:IT老高 更新时间:2023-10-29 00:05:32 28 4
gpt4 key购买 nike

我正在使用一个复杂的 MySQL 数据库表来收集表单数据。我在下面名为 test 的示例表中简化了布局:

|FormID|FieldName|  FieldValue |
| 1 | city | Houston |
| 1 | country | USA |
| 2 | city | New York |
| 2 | country |United States|
| 3 | property| Bellagio |
| 3 | price | 120 |
| 4 | city | New York |
| 4 |zip code | 12345 |
| 5 | city | Houston |
| 5 | country | US |

通过 phpMyAdmin,我需要对某些表进行全局更新,特别是我想更新所有 FieldValue 条目到“United States of America”,FieldName “国家”与 FieldName“城市”和 FieldValue“休斯顿”具有相同的 FormID

我可以通过使用 SUBQUERY 或使用 INNER JOIN 使用 SELECT 语句轻松显示这些条目:

SELECT FieldValue
FROM test
WHERE FormID
IN (
SELECT FormID
FROM test
WHERE FieldName = "city"
AND FieldValue = "Houston"
)
AND FieldName = "country"

或者:

SELECT a.FieldValue
FROM test a
INNER JOIN test b ON a.FormID = b.FormID
WHERE a.FieldName = "country"
AND b.FieldName = "city"
AND b.FieldValue = "Houston"

但是,我尝试编写我的UPDATE 语句时,我收到某种形式的 MySQL 错误,表明我无法在子查询内部查询中引用同一个表加入联合 场景。我什至创建了一个 View 并试图在更新语句中引用它,但没有解决。有谁知道如何帮助我吗?

最佳答案

您必须使用临时表,因为您无法更新用于选择的内容。一个简单的例子:

这行不通:

UPDATE mytable p1 SET p1.type= 'OFFER' WHERE p1.parent IN 
(SELECT p2.id from mytable p2 WHERE p2.actu_id IS NOT NULL);

这将完成工作:

UPDATE mytable p1 SET p1.type= 'OFFER' WHERE p1.parent IN 
(SELECT p2.id from (SELECT * FROM mytable) p2 WHERE p2.actu_id IS NOT NULL);

"from (SELECT * FROM mytable) p2"将创建您的表的临时副本,不会受到您的更新的影响

关于MySQL UPDATE 与同一张表的 SUBQUERY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359534/

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