2017-08-23 12 views
0

いくつかの条件でLEFT OUTER JOINを実行しています。私はそのために使用しているコードは次のとおりです。LEFT JOIN後のUPDATEテーブル

これを行う
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を選択している[価格]列の印刷を行っても、その列が存在しないというエラーが表示されます。

ここで私が解決しようとしている例:LEFT AFTER

表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 

TABLEは

を登録しよう
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の後にテーブルを更新して変更を保存するにはどうすればよいですか?その後

ALTER TABLE TABLE1 ADD COLUMN Price INTEGER; 

値でPrice列を移入するには、以下のアップデートを実行します。

+0

どのテーブルを更新しますか? –

+0

表1。私は接続を閉じて後で再接続しても、列 "価格"を見たいと思います。 – Ralk

答えて

0

を次のようにだけ更新クエリを使用して更新table nameall the required columns in the table_to_be_updated set to individual columns in the join query

+0

問題は、テーブル 'Price'がLEFT JOINの前にテーブル1に存在しないことです。 – Ralk

+0

価格表を追加して価格列を追加してから更新する –

2

まずTABLE1Price列を追加設定しました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.を使用してください。私の更新答え。 –