2016-07-05 7 views
0

を取得:私は2つのテーブル持って一つのテーブルからレコードと対応するテーブル

orders 
poid | user | pid | payment_id 
1 | 1 | 1 | abc123 
2 | 2 | 2 | def345 

orders_addon 
poaid | user | poid | pid 
1  | 1 | 1 | 3 
2  | 1 | 1 | 5 

一つは、二番目は、ユーザーが自分のために追加できるアドオンを表し、注文を表します。

注文には常に行があり、注文に一致する注文番号がないことがあります。

私は、ordersとorders_addonに一致する行があればそれを返すクエリを探しています。

SELECTユーザー、WHERE payment_id = ... pidをから

「ABC123」

user | pid 
1 | 1 
1 | 3 
1 | 5 

を返す必要があり、内に一致するレコードが存在しない場合、同じクエリのみ受注テーブルから結果を返す必要がありますorders_addonテーブル

SELECTユーザー、FROM ... WHERE payment_id =「def345」私はこれがUNIONを使用して行うことができるが、その後、私はテーブルを一致させることができないであろうと、それはなるだろう数える

user | pid 
2 | 2 

PID orders_addonテーブルから問題がpayment_id

答えて

0

使用LEFTを持っていない場合なステートメント

mysql> (SELECT u.user,IFNULL(ua.pid ,u.pid) as pid 
      FROM orders u 
      inner JOIN orders_addon ua on ua.poid=u.poid 
      WHERE u.payment_id = 'abc123' 
     ) 
    union all 
     (SELECT u.user,u.pid 
      from orders u 
      where u.payment_id = 'def345' 
    ); 
+------+------+ 
| user | pid | 
+------+------+ 
| 1 | 3 | 
| 1 | 5 | 
| 2 | 2 | 
+------+------+ 
3 rows in set (0.00 sec) 

mysql> (SELECT u.user,IFNULL(ua.pid ,u.pid) as pid 
      FROM orders u 
      inner JOIN orders_addon ua on ua.poid=u.poid 
      WHERE u.payment_id = 'def345' 
     ) 
    union all 
     (SELECT u.user,u.pid 
      from orders u 
      where u.payment_id = 'def345' 
     ); 

+------+------+ 
| user | pid | 
+------+------+ 
| 2 | 2 | 
+------+------+ 
1 row in set (0.00 sec) 
+0

と結合し、これを試してみて、私は最初例えば –

+0

このことを教えてください2行しか戻さない場合は、orders表の結果が欠落しています。 – maddo7

+0

@ maddo7 updated query今すぐチェックしてください –

関連する問題