2016-12-13 12 views
0

私は、顧客に関するさまざまな情報がまったく別のサーバーにあるという問題があります。行の一致時にNULL値を置き換えるためにMySQLでテーブルを結合する

これまでのところ私の解決策は、各サーバーから必要な部分を取り出し、それらをMySQLで組み合わせることです。

問題: MySQLのあるテーブルのNULL値を、別のテーブルの情報で置き換えようとしています。

情報は、列がOrderName列にNULLと表示され、元の表のOrder_ID列に-1が表示されている場合にのみ、2番目の表に表示されます。この2番目の表には情報が欠落しており、Cust_IDやDateTimeなどの他の列と整列します。

など。

表1:

Cust_ID | Order_ID | OrderName | DateTime | Other_Info 
------------------------------------------------------------------------------ 
12345  |  -1  |  NULL  | 2016/01/01 |  Info1 
12345  |  1254  |  Orange  | 2016/02/03 |  Info2 
54321  |  5412  |  Apple  | 2016/04/15 |  Info3 
45899  |  -1  |  NULL  | 2016/06/08 |  Info4 

表2:

Cust_ID | OrderID | OrderName | DateTime 
------------------------------------------------------------- 
12345  |  1549  |  Banana  | 2016/01/01 
45899  |  5862  |  Grape  | 2016/06/08 

所望の出力:句がCOALESCE達成する機能と組み合わせた場合、私はCASEを使用して試みた

Cust_ID | Order_ID | OrderName | DateTime | Other_Info 
------------------------------------------------------------------------------ 
12345  |  1549  |  Banana  | 2016/01/01 |  Info1 
12345  |  1254  |  Orange  | 2016/02/03 |  Info2 
54321  |  5412  |  Apple  | 2016/04/15 |  Info3 
45899  |  5862  |  Grape  | 2016/06/08 |  Info4 

これはまだ成功していない。

これはMySQLで可能ですか?

もしそうなら、これを達成するためのガイダンスは非常に高く評価されます。

ありがとうございました。

+0

plzはなぜあなたは2つのので、同様のテーブルがありますか 'のsql-server' –

+0

のような不要なタグを削除しますか?すべてのデータをtable1とdrop table2に保存できませんか? – jarlh

答えて

0

あなたはleft joinを探しています:

LEFT JOIN
select t1.cust_id, coalesce(t2.orderid, t1.order_id) as order_id, 
     coalesce(t2.order_name, t1.order_name) as order_name, 
     t1.datetime, t1.other_info 
from table1 t1 left join 
    table2 t2 
    on t1.cust_id = t2.cust_id and 
     t1.datetime = t2.datetime and 
     t1.order_id = -1; 
+0

'COALESCE()'は 'order_id'列に対しては機能しません。 – sagi

+0

@sagi。 。 。 'COALESCE()'は正常に動作します。問題は 'ON'節にありました。適切な比較がテーブル間のマッチングのためにここにあります。 'NULL'は' LEFT JOIN'がマッチしないことから来ます。 –

+0

ああ、私はあなたが今やっていることを見る:) – sagi

0

使用CASE EXPRESSION

SELECT t1.cust_id, 
     CASE WHEN t1.order_id = -1 THEN t2.orderid else t1.order_id END as order_id, 
     CASE WHEN t1.orderName IS NULL THEN t2.orderName else t1.orderName END as order_Name, 
     t1.dateTime, 
     t1.other_info 
FROM Table1 t 
LEFT JOIN Table2 s 
ON(t.cust_id = s.cust_id) 
0

LEFTは、CASE条件で登録しようあなたに必要なデータを取得することができます。

SELECT T1.CUST_ID, 
    CASE WHEN T1.ORDER_NAME IS NULL THEN T2.ORDER_ID ELSE T1.ORDER_ID END, 
    CASE WHEN T1.ORDER_NAME IS NULL THEN T2.ORDER_NAME ELSE T1.ORDER_NAME END, 
    T1._DATE_TIME, 
    T1.OTHER_INFO 
    FROM 
    TABLE1 T1 
    LEFT JOIN TABLE2 T2 
    ON T1.CUST_ID = T2.CUST_ID; 
関連する問題