4

我有一张这样的桌子。

 CREATE TABLE `chart` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `item` char(6) NOT NULL DEFAULT '',
      `IsLeaf` char(1) NULL DEFAULT 'Y',
      `ParentId` int(10) NOT NULL DEFAULT 0,
      PRIMARY KEY (`id`)
   )

其中 parentId 包含另一行的 id ,这是该行的父行 Like

-----------------------------------------------------------------
|   Id  |   item    |   IsLeaf      |  ParentId
-----------------------------------------------------------------
|   1   |   Test1   |   D           |  
-----------------------------------------------------------------
|   2   |   Test3   |   D           |  
-----------------------------------------------------------------
|   3   |   Test4   |   D           |   1
-----------------------------------------------------------------
|   4   |   Test5   |   D           |   1
-----------------------------------------------------------------

我想更新那些至少有一个子行的行。我试过这样

UPDATE chart AS c1 SET c1.IsLeaf='Y' JOIN chart c2 ON c2.ParentId=c1.id;

并得到了这个错误

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN chart c2 ON c2.ParentId=c1.id' at line 1
4

2 回答 2

3

您必须在 LEFT JOIN 之后使用 SET KEYWORD 并且必须检查 null

UPDATE chart AS c1 
LEFT JOIN chart c2 ON c2.ParentId=c1.id SET c1.IsLeaf='Y' 
WHERE c2.id is null;
于 2013-09-01T09:53:45.300 回答
2

尝试使用LEFT JOIN这样的: -

 UPDATE chart AS c1 
 LEFT JOIN chart c2 ON c2.ParentId=c1.id 
 SET c1.IsLeaf='Y' WHERE c2.id is null;
于 2013-09-01T09:54:10.403 回答