使用SQLite UPDATE语句进行多表连接

时间:2018-03-22 12:00:54

标签: sql sqlite

使用SQLite 3,我试图从一个表中更新列值,其中列值来自另一个表。使用TSQL实现这一点非常简单,但使用SQLite证明非常困难,UPDATE子句中不允许多表连接。

This other stack overflow question似乎有解决方案,但在我所有的列值最终都相同的情况下,它对我不起作用。

在我的方案中,我有2个表,tbl_orderstbl_orderitems,其中可以有给定tbl_orderitems条记录的许多tbl_orders条记录。

我希望使用order_id表中相应的tbl_orderitems值更新id表中的tbl_orders列。这两个表都有一个共同的order_number列,用于将tbl_orderitems记录链接到相应的tbl_orders记录。

根据The answer to the question referred to above,我有以下SQL声明。

UPDATE tbl_orderitems 
 SET order_id=(select tbl_orders.id from tbl_orders, tbl_orderitems where tbl_orders.order_number = tbl_orderitems.order_number)
 where  EXISTS (
        select tbl_orders.order_number from tbl_orders, tbl_orderitems where tbl_orders.order_number = tbl_orderitems.order_number 
 )  

不幸的是,上面的SQL语句最终会将order_id表中的所有tbl_orderitems设置为相同的值,这当然不是我想要的。

有没有办法在SQLite中实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

我认为你想要相关的子查询:

,

您的问题是您在子查询中有from。您需要引用外部查询。第二个问题是在join子句中使用{{1}}。在适当的情况下,您应该始终使用正确的,明确的{{1}}语法,在这种情况下,它是不合适的。