2016-05-13 8 views
0

私はMysqlを使用していますが、更新クエリから結果を取得しようとしています。私は2つのテーブルを持っています。まず、テーブルloaddata_tempと第二テーブルセクションcompany_categorycase mysqlとの更新

最初のテーブルloaddata_temp

|id_external|company_name    |company_category_id| 
------------------------------------------------------------- 
|   1|iqballord     |UD     | 
|   2|A Plus Lawn Care   |PT     | 
|   3|A. L. Price    |PMA    | 
|   4|A.J. August Fashion Wear |BUMN    | 
|   5|A+ Electronics    |WARUNG    | 
|   6|A+ Investments    |PT     | 

第二表Company_category

|company_category_id|company_category_description| 
--------------------|----------------------------- 
|     3|PT       | 
|     5|UD       | 
|     6|PMA       | 
|     7|BUMN      | 
|     23|Koperasi     | 

は、私は私がexpeted何

UPDATE loaddata_temp,company_category 
     SET loaddata_temp.company_category_id= 
     CASE 
      WHEN loaddata_temp.company_category_id = company_category.company_category_description 
      THEN company_category.company_category_id 
      ELSE 'error' END 

ような結果を得るために、このクエリを使用しました上のクエリ

0123から
|id_external|company_name    |company_category_id| 
------------------------------------------------------------- 
|   1|iqballord     |5     | 
|   2|A Plus Lawn Care   |3     | 
|   3|A. L. Price    |6     | 
|   4|A.J. August Fashion Wear |7     | 
|   5|A+ Electronics    |error    | 
|   6|A+ Investments    |3     | 

が、私は

|id_external|company_name    |company_category_id| 
------------------------------------------------------------- 
|   1|iqballord     |error    | 
|   2|A Plus Lawn Care   |error    | 
|   3|A. L. Price    |error    | 
|   4|A.J. August Fashion Wear |error    | 
|   5|A+ Electronics    |error    | 
|   6|A+ Investments    |3     | 
+0

なぜ、選択...の代わりに更新...を使用していますか? – Kunal

+0

company_categoryと関係のないファイルにロードローカルデータを使ってインポートしたときにチェックする必要があります。 あなたには何か提案や最善の方法がありますか? –

答えて

3

は、私は次のクエリ使用し得るもの:更新の一致する行を見つけるために

UPDATE  loaddata_temp lt 
LEFT JOIN company_category cc 
     ON cc.company_category_description = lt.company_category_id 
    SET  lt.company_category_id = COALESCE(cc.company_category_id, 'error'); 

使用LEFT JOINをします。 company_categoryテーブルで行が見つからなかった場合は、 'error'に更新します。

+0

は完全に動作します:) 応答に感謝します。 –

0
UPDATE loaddata_temp l LEFT JOIN company_category c ON c.company_category_description = l.company_category_id 
     SET loaddata_temp.company_category_id= If(c.company_category_id IS NULL, 'error' ,c.company_category_id) 

また、company_category_idが見つかった場合はIFステートメントを使用して、そうでない場合は「エラー」を返します。