当前位置:  开发笔记 > 后端 > 正文

如何在SQLite上连接表时进行更新?

如何解决《如何在SQLite上连接表时进行更新?》经验,为你挑选了2个好方法。

我试过了 :

UPDATE closure JOIN item ON ( item_id = id ) 
SET checked = 0 
WHERE ancestor_id = 1

和:

UPDATE closure, item 
SET checked = 0 
WHERE ancestor_id = 1 AND item_id = id

两者都适用于MySQL,但那些在SQLite中给我一个语法错误.

如何使这个UPDATE/JOIN与SQLite版本3.5.9一起使用?



1> Andrew Watt..:

你不能.SQLite 不支持UPDATE语句中的JOIN.

但是,您可以使用子查询来执行此操作:

UPDATE closure SET checked = 0 
WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1);

或类似的东西; 目前还不清楚你的架构究竟是什么.


当你需要做的是将一列从一个表复制到另一个表以便反转关联的方向时.在MySQL中你可以做些什么,比如创建foos.bar_id列,然后`更新foos连接吧吧.foo_id = foos.id设置foos.bar_id = bars.id`,然后删除bars.foo_id列......怎么可以在SQLite中完成?如果有人知道,我可以肯定地使用它.

2> Roman Nazare..:

您也可以使用REPLACE,然后您可以使用连接选择.像这样:

REPLACE INTO clusure 
 SELECT sel.col1,sel.col2,....,sel.checked --checked should correspond to column that you want to change
FROM (
 SELECT *,0 as checked FROM closure LEFT JOIN item ON (item_id = id) 
 WHERE ancestor_id = 1) sel

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有