MySQL子查询将无法正常工作

时间:2015-08-09 20:48:00

标签: mysql

我遇到了subquerys的问题。 在我输入的时候在phpMyAdmin中:

SELECT companys.id 
  FROM companys 
  JOIN users 
    ON users.company = companys.id 
 WHERE users.id = '$LOGGED_IN_USER'

我得到了1号回归。这是对的。

然后我测试了:

UPDATE companys 
   SET companys.signature = '$SIGNATURE' 
 WHERE companys.id = 1 

这也有效,它用$ SIGNATURE更新值,其中companys.id = 1.到目前为止一切顺利。现在来问题了。当我将这两者结合起来时会出现问题:

UPDATE companys 
   SET companys.signature = '$SIGNATURE' 
 WHERE companys.id = ( SELECT companys.id 
                         FROM companys 
                         JOIN users 
                           ON users.company = companys.id 
                        WHERE users.id = '$LOGGED_IN_USER')

数据库永远不会更新。这就像内部选择因某种原因突然不起作用。

1 个答案:

答案 0 :(得分:0)

使用更新查询,您应该收到错误:您无法在FROM子句中为更新指定目标表'companys'

一种解决方案是强制MySQL创建一个可以用作源的临时结果集:

UPDATE companys 
   SET companys.signature = '$SIGNATURE' 
 WHERE companys.id = ( 
   SELECT id FROM (
     SELECT companys.id 
     FROM companys 
     JOIN users 
     ON users.company = companys.id 
     WHERE users.id = '$LOGGED_IN_USER'
   ) src
 ); 

有关工作示例,请参阅此SQL fiddle