基于其他行的MySQL子查询

标签 mysql subquery elgg

我有一个看起来像这样的表:

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 = columnvalue = 3 的行,以便 value = 2。但我只想用相同的 entity_guidname = contextvalue = 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/

相关文章:

PHP 嵌套注释(父/子)

php - 属性值的空白值

java - (java) 循环检查连接

mysql - mysql中的更新语句

mysql - 如何避免在联合中运行两次昂贵的子查询

php - 通过 HTML 表单发布 XML

mysql - 连接多个匹配值的表

sql-server - 将 SQL 查询转换为 hibernate 条件和投影

php - Xdebug远程调试可变字符串长度

ELGG、PHPFOX、社交引擎等 : what's your favourite social network script and why?