2016-10-02 21 views
0

私は変更する電話番号が

Contacts 
number (Primary key) 
name (name of the contact) 

Messages 
id (primary key) 
number (reciever or sender's phone number) 
type (sent or recieved) 
text (message body) 
date (timestamp) 

などの連絡先のテーブルを持っている私が欲しいのは、私が会話をするために電話番号でメッセージ、およびグループにそれらを照会するとき、私は変更したいです連絡先テーブル内の連絡先の名前で変更するメッセージテーブルの電話番号(存在しない場合)電話番号を電話番号のままにしておくと、テキストも入力できる不明な番号が表示されます。 PS私は解決策を見つけるためにたくさんのグーグルを見つけましたが、見つけられませんでした。例えば

Contacts table contain 
id  name 
1  a 
2  b 

Messages Contain 
id number type  text date 
1  1  sent haha 123456 
2  3  recieved hi 123459 

今、結果はあなたがLEFT JOINMessages間のテーブルとContactsテーブルを使用する必要が

number type  text  date 
    a  sent  haha  123456 
    3  received hi  123459 
+0

サンプル入力と期待される出力は、あなたの条件ピンポイントでしょう – 1000111

+0

1000111 @申し訳ありませんが、なかったの; tは、私はそのサンプル入力に基づいて、いくつかのサンプル入力と期待される出力を求めたあなたのポイント – Axeem

+0

を取得します。現在のクエリを共有する – 1000111

答えて

1

でなければなりません。

SELECT 
COALESCE(c.name,m.id) AS number, 
m.type, 
m.text, 
m.date 
FROM messages m 
LEFT JOIN contacts C ON m.number = C.id; 

注:

のMySQL COALESCE()関数ない非NULL値がない場合は、最初の非NULLリストの値、またはNULLを返します。

mysql> SELECT COALESCE(NULL, 2, 3); 
+----------------------+ 
| COALESCE(NULL, 2, 3) | 
+----------------------+ 
|     2 | 
+----------------------+ 
1 row in set (0.02 sec) 
mysql> SELECT COALESCE(NULL, NULL, NULL); 
+----------------------------+ 
| COALESCE(NULL, NULL, NULL) | 
+----------------------------+ 
|      NULL | 
+----------------------------+ 
1 row in set (0.00 sec) 
+0

これはちょうど素晴らしいです...... – Axeem