MYSQL:将子查询转换为主查询中更新的表

时间:2011-01-08 22:12:41

标签: mysql

我想做这样的事情:

  1. 在表格标签中找到名称为'someName'的行,并记住它的id
  2. 在同一个表中找到另一行带有someCondition并在此行中设置col refference =上面的id
  3. 尝试使用子查询执行此操作,但mysql拒绝说我无法查询我在主查询中更新的表。

    我怎样才能实现上述想法?

    谢谢

2 个答案:

答案 0 :(得分:1)

Convert your subquery to a join然后UPDATE

  

您还可以执行覆盖多个表的UPDATE操作。但是,您不能将ORDER BY或LIMIT与多表UPDATE一起使用。 table_references子句列出了连接中涉及的表。其语法在第12.2.8.1节“JOIN语法”中描述。这是一个例子:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
The preceding example shows an inner join that uses the comma operator, but multiple-table 
  

UPDATE语句可以使用SELECT语句中允许的任何类型的连接,例如LEFT JOIN。

答案 1 :(得分:0)

你可以这样做

    update TAGS set 
    reference = 
        (select my_id from 
            (select id as my_id from TAGS where name='someName') 
         as SUB_TAGS) 
    where someCondition;

虽然不可取。


编辑#1 您可以完全避免子查询 - taspeotis rightly mentionedjoin使用标准的同一个表。这里是代码:

  UPDATE 
    TAGS t1, TAGS t2 
  SET 
    t1.reference = t2.id
  WHERE
        t2.name = 'someName' 
    AND
        t1.someField = someCondition;

这是一种更好的方法。