2016-07-05 2 views
0

У меня есть две таблицы:Получить записи из одной таблицы и соответствующей таблицы

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 

Один представляет заказы, второй представляет аддоны пользователь может добавить в свой заказ.

Всегда существует строка в заказах, и может случиться так, что для заказа нет соответствующих заказов_addon.

Я ищу запрос, который возвращает соответствующие строки из заказов и orders_addon, если есть соответствующие.

ВЫБРАТЬ пользователь, PID FROM ... WHERE payment_id = 'abc123'

Если вернуться

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

И тот же запрос должен возвращать только результаты из таблицы заказов, если нет соответствующих записей в таблица orders_addon.

ВЫБРАТЬ пользователь, PID FROM ... WHERE payment_id = «» def345

user | pid 
2 | 2 

Я считаю, это может быть сделано с помощью UNION, но тогда я не смог бы соответствовать таблицам и это стало бы проблема с таблицей orders_addon не имеет payment_id

ответ

0

Используйте LEFT JOIN с IF Постулаты

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 строки, результат из таблицы заказов отсутствует. – maddo7

+0

@ maddo7 обновленный запрос, пожалуйста, проверьте сейчас –

Смежные вопросы