Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
JOIN-ы и зацепленные на них таблицы. (Андрей) 25/02/2011 - 10:42:14
      Re: JOIN-ы и зацепленные на них таблицы -упростим (Андрей) 25/02/2011 - 11:26:14
      Re: JOIN-ы и зацепленные на них таблицы -упростим (Akina) 28/02/2011 - 09:37:40
      Re: JOIN-ы и зацепленные на них таблицы -упростим (Андрей) 11/03/2011 - 15:17:49

> Original message text:
> From: Андрей - 25/02/2011 - 10:42:14
> Subject:JOIN-ы и зацепленные на них таблицы.
> -----------------
> Имеем базу задач, в которой есть две ссылки на людей, связанных с задачей. Человек может быть только один, может не быть ни одного. Ранее делалась выборка с двумя джоинами, запрос отрабатывал за достаточно короткий период времени.
> SELECT a.*, b.name, b.place, c.name, c.place FROM task AS a LEFT JOIN person AS b ON b.id=a.person1 LEFT JOIN person AS c ON c.id=a.person2
> Теперь для людей размещение перенесли в отдельную таблицу из-за слияния с другой базой.
> SELECT a.*, b.name, d.placename, c.name, e.placename FROM task AS a LEFT JOIN person AS b ON b.id=a.person1 LEFT JOIN person AS c ON c.id=a.person2, place AS d, place as e WHERE d.id=b.place AND e.id=c.place
> работает только там, где оба джоина зацеплены, если в b или c нули, WHERE не выполняется, и такие записи теряются
>
> Если связь на помещения вынести в условия джоина:
> SELECT a.*, b.name, d.placename, c.name, e.placename FROM task AS a LEFT JOIN person AS b ON (b.id=a.person1 AND d.id=b.place)LEFT JOIN person AS c ON (c.id=a.person2 AND e.id=c.place), place AS d, place as e
> то происходит перемножение таблиц, получаем верный набор записей, но на каждую запись таблицы a возвращается количество строк, равное количеству мест в таблице d или e. Фактически, для джоиненой таблицы происходит только выбор по ней и полной таблицы размещения.
>
> Если побить на юнион из 4 запросов (оба лица, только первое, только второе, ни одного, дополняя неиспользованные джоины нуллами для соответствия кол-ва столбцов) скорость выполнения запроса падает более чем на порядок.
>
> Есть ли какое-либо решение "малой кровью" для такой задачи?
>


From: Akina - 28/02/2011 - 09:37:40
Subject:JOIN-ы и зацепленные на них таблицы -упростим
-----------------
SELECT a.*, b.field, c.field1
FROM a
LEFT JOIN b ON b.id=a.b_link
LEFT JOIN c ON c.id=b.c_link


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
38065



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |