mysql更新问题,其中id在

标签 mysql

今天有一个新问题..

不知道为什么它不起作用,但我正在尝试使用 where id in() 更新表列。 我收到此错误:

You can't specify target table 'membre_non_filtrer' for update in FROM clause 

这是函数:

UPDATE membre_non_filtrer 
SET chef=1 where id IN(
        SELECT tt.id FROM membre_non_filtrer tt INNER JOIN 
        (SELECT famid, MAX(age) AS maxAge 
        FROM membre_non_filtrer GROUP BY famid)
        groupedtt ON tt.famid = groupedtt.famid 
        AND tt.age = groupedtt.maxAge ORDER BY `tt`.`famid` ASC)

只是告诉您 SELECT 有效并返回了一个很好的值。

有什么想法吗?

最佳答案

一个快速的技巧是为您的子查询设置别名,例如 IN(SELECT t.id FROM (subquery) t )

UPDATE membre_non_filtrer 
SET chef=1 where id IN(
SELECT t.id FROM       
 SELECT tt.id FROM membre_non_filtrer tt INNER JOIN 
        (SELECT famid, MAX(age) AS maxAge 
        FROM membre_non_filtrer GROUP BY famid)
        groupedtt ON tt.famid = groupedtt.famid 
        AND tt.age = groupedtt.maxAge ORDER BY `tt`.`famid` ASC
) t
)

或者你可以使用加入

UPDATE 
  membre_non_filtrer tt 
  INNER JOIN 
    (SELECT 
      famid,
      MAX(age) AS maxAge 
    FROM
      membre_non_filtrer 
    GROUP BY famid) groupedtt 
    ON tt.famid = groupedtt.famid 
    AND tt.age = groupedtt.maxAge
 SET tt.chef = 1 

关于mysql更新问题,其中id在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25147762/

相关文章:

MySQL - 更好的语法来比较 where 子句中的多个变量

mysql - 使用 mysql 和正则表达式模式转换和提取行

mysql - 如何将我的 mysql session 设置在某个时区?

mysql - 如何在 SQL 的 WHERE 子句中使用 IN 运算符和 AND 运算符...?

mysql - mysql中如何用空格替换双引号?

mysql - 从左连接表返回 True 或 False 的 SQL 查询

php - 上载多个图像并将其路径存储在数据库中

PHP - 多个 bind_params 失败

php - 什么是更快的 file_exists 或 DB 检索?

php - 如何在 php 中获取特定国家/地区的正确日期时间