MYSQL Query Left Join - PullRequest
       2

MYSQL Query Left Join

0 голосов
/ 22 марта 2012

Вот мой запрос

select t1.*, t2.name as customer, t2.name as vendor from order t1
left join contact t2
on t2.id = t1.cid and t2.id = t1.vendid
where t1.id = 22
  • contact_Table => id, Name
  • order_Table => id, orderName, cid, vendid

Моя проблема в том, что я хочу выбрать заказ, где order.id = 22, а вместо order.cid, order.vendid я хочу, чтобы их имена существовали в таблице контактов.

Результат запроса выше с customer = vendor = NULL

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Хорошо.В результате запроса будет указано customer = vendor = null, поскольку вы устанавливаете t2.id = t1.cid and t2.id=t1.vendid или t2.id = t1.cid = t1.vendid.Поскольку я полагаю, что ни у одного заказа нет идентичного поставщика и идентификатора клиента, ваш запрос не будет работать.

Попробуйте:

SELECT t1.*, t2.name as cust, t3.name as vendor
FROM order t1
LEFT JOIN contact t2 ON (t2.id=t1.cid)
LEFT JOIN contact t3 on (t3.id=t1.vendid)
WHERE t1.id=22

Таким образом, вы дважды связываетесь с таблицей контактов, один из которыхполучить информацию о клиенте и один, чтобы получить информацию о продавце.

1 голос
/ 22 марта 2012

Здесь звучит так, будто вы действительно хотите два отдельных объединения в таблицу контактов, одно для клиента и другое для поставщика, это также помогает сделать псевдонимы таблицы более значимыми, чтобы избежать путаницы:

SELECT o.*, c.name as customer, v.name as vendor 
FROM order o
LEFT JOIN contact c on (c.id = o.cid) 
LEFT JOIN contact v ON  (v.id = o.vendid)
WHERE o.id = 22
...