SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.08.2010 17:03:06

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Упростить запрос LEFT JOIN

Нужно отобразить список клиентов и брендов в таком виде:

Клиент1
Клиент1 - Бренд 1
Клиент1 - Бренд 2
Клиент2
Клиент2 - Бренд 3
Клиент3
Клиент4

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

Пока что все что смог сделать:

Код:

SELECT c.id as cid, c.company_name, b.id as bid, b.name
FROM client c LEFT JOIN brand b ON b.fk_client=c.id
UNION 
SELECT cc.id as cid, cc.company_name, null as bid, null 
FROM client cc
WHERE exists (select * from brand bb where bb.fk_client=cc.id)
ORDER BY company_name, name

но не покидает чувство, что это можно сделать проще, а тут получается 3 подзапроса... Как то не сильно ли накладно?

Отредактированно Герман Клюшин (05.08.2010 17:03:57)


Иисус - Бог неба и земли!

Неактивен

 

#2 05.08.2010 17:13:27

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Упростить запрос LEFT JOIN

Ну если немного подправит' - то вот:


SELECT c.id as cid, c.company_name, b.id as bid, b.name
FROM client c _INNER_JOIN_ brand b ON b.fk_client=c.id
UNION
SELECT cc.id as cid, cc.company_name, null as bid, null
FROM client cc
ORDER BY company_name, name
 


на один подзапрос мен'ше

Отредактированно vaspet (05.08.2010 17:14:33)

Неактивен

 

#3 05.08.2010 18:12:54

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Re: Упростить запрос LEFT JOIN

Все гениальное просто!
Спасибо, как это я сам не догадался?


Иисус - Бог неба и земли!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson