Sql根据另一个表的连接值更新表

时间:2014-11-14 02:56:43

标签: mysql

基于此post,这应该可行,但它无法正常工作:

UPDATE `cms_download` 
SET folder_id = '230'
FROM `cms_download` file
LEFT JOIN `cms_download_folder` folder
ON file.folder_id = folder.folder_id
WHERE file.client_id = '69'
AND folder.folder_id = NULL

我所拥有的是一个文件表(cms_download),其中包含一个引用包含此文件的文件夹的列(cms_download_folder)。而我正在尝试将所有没有分配文件夹的文件设置为特定文件夹。我可以知道通过左右两个表连接在文件夹ID上,并且(cms_download_folder)表中的条目不存在(cms_download)表中的条目,我将更改(cms_download中的folder_id) )表,以便它引用存在的条目。

我希望我有意义。

感谢Gordon,我得到了正确的查询:

UPDATE  `cms_download` file 
LEFT JOIN  `cms_download_folder` folder 
ON file.folder_id = folder.folder_id 
SET file.folder_id =  '230' 
WHERE file.client_id =  '69' 
AND folder.folder_id = NULL

1 个答案:

答案 0 :(得分:1)

问题是您使用的是SQL Server语法,但您的帖子标记为MySQL。 join在MySQL的set之前:

UPDATE `cms_download` file LEFT JOIN
       `cms_download_folder` folder
        ON file.folder_id = folder.folder_id
    SET folder_id = '230'
WHERE file.client_id = '69' AND folder.folder_id = NULL;