LEFT JOIN后的UPDATE表

时间:2017-08-23 04:39:09

标签: python python-2.7 sqlite

我在某些条件下正在进行LEFT OUTER JOIN。我正在使用的代码是:

SELECT *
FROM
(SELECT ADS, Unit, Quantity, ZXY FROM TABLE1) as A
LEFT OUTER JOIN (SELECT ADS, Name, Unit_U, Price FROM TABLE2) as B
    ON ((A.ADS = B.ADS OR A.ADS = B.Name) and A.Unit = B.Unit_U) COLLATE nocase

这样做我到达打印结果,但表没有更新(如果我关闭连接并重新启动它,我没有看到最后一列)。

即使我选择表1的“价格”列打印,我也会收到一条错误消息,说该列不存在。

这是我想要解决的例子:

表1

   ADS   Unit   Quantity   ZXY
--------------------------------------
    1     KG        2      None
    2     KG        1      None
    3     KG        3      None
    4     KG        5      None
    5     KG        7      None
    6     KG        1      None

表2

    ADS   Name   Unit_U    Price
--------------------------------------
     1     15      KG      7.00
     25    2       KG      8.00
     3     14      KG      5.00
     25    4       G       8.00

LEFT JOIN后的桌子

    ADS   Unit   Quantity   ZXY   Price
   --------------------------------------
     1     KG        2      None   7.00
     2     KG        1      None   8.00
     3     KG        3      None   5.00
     4     KG        5      None   None
     5     KG        7      None   None
     6     KG        1      None   None

如何在LEFT OUTER JOIN之后更新de table并保存修改?

2 个答案:

答案 0 :(得分:2)

首先向Price添加TABLE1列:

ALTER TABLE TABLE1 ADD COLUMN Price INTEGER;

然后运行以下更新,使用Price中的值填充TABLE2列(如果有):

UPDATE TABLE1 t1
SET Price = (SELECT Price FROM TABLE2
             WHERE
                 (LOWER(t1.ADS) = LOWER(t2.ADS) OR LOWER(t1.ADS) = LOWER(t2.Name)) AND
                 LOWER(t1.Unit) = LOWER(t2.Unit_U))

SQLite不支持更新连接,使用子查询是另一种选择。

<强>更新

对字段进行不区分大小写的比较的一种方法是比较左侧和右侧的小写版本。

答案 1 :(得分:0)

只需使用更新查询,如下所示

更新table name 设置all the required columns in the table_to_be_updated set to individual columns in the join query