我在某些条件下正在进行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并保存修改?
答案 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