2017-08-23 67 views
0

我正在做一個左外部JOIN與一些條件。我使用的代碼是:LEFT 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的'Price'列,我也會收到一個錯誤消息,指出該列不存在。

在這裏,我試圖解決的例子:

表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 

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

+0

您要更新哪張表? –

+0

表一。即使關閉連接並重新連接後,我也希望看到「價格」欄。 – Ralk

回答

0

只需使用更新查詢如下

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

+0

問題是在LEFT JOIN – Ralk

+0

之前表1中不存在「價格」列做一個更改表來添加價格列,然後更新它 –

2

加上一個PriceTABLE1

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不支持更新連接,並且使用子查詢是另一種選擇。

更新:

一種方法做你的域不區分大小寫的比較是比較左側和右側的小寫版本。

+0

我該怎麼做才能比較條件不區分大小寫? – Ralk

+0

@Ralk使用'LOWER',q.v.我更新的答案。 –