我有一个看起来像这样的表:
entity_guid | name | value
---------------|----------------|--------
189501 | context | groups
189501 | column | 3
189509 | context | profile
189509 | column | 3
189521 | context | profile
189521 | column | 2
189551 | context | groups
189551 | column | 1
189552 | context | groups
189552 | column | 3
189554 | context | groups
189554 | column | 2
189559 | context | profile
189559 | column | 1
189591 | context | profile
189591 | column | 3
我想更新 name = column
和 value = 3
的行,以便 value = 2
。但我只想用相同的 entity_guid
和 name = context
和 value = groups
更新存在另一行的行。
例如,如果我要选择要更改的行,它们将是:
entity_guid | name | value
---------------|----------------|--------
189501 | column | 3
189552 | column | 3
我试过:
SELECT * FROM (
SELECT * FROM `elggprivate_settings` WHERE `name` = 'context' AND `value` = 'groups'
) AS subquery
WHERE `name` = 'column' AND `value` = 3
但这当然行不通,因为表格不是那样设置的;同一个 entity_guid
有多个行。顺便说一下,这是社交网络引擎 elgg 数据库中的一个表。我对 MySQL 不是很好,无法在网上找到答案。
最佳答案
xQbert 很接近,但他忘记了用于检查子记录是否存在的上下文/组子句。
UPDATE
elggprivate_settings
SET
value = '2'
WHERE
name = 'column' AND value = '3'
AND entity_guid IN (
SELECT
entity_guid
FROM
elggprivate_settings
WHERE
name = 'context'
AND value = 'groups')
关于基于其他行的MySQL子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096472/