Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / переделать IN на JOIN / 12 сообщений из 12, страница 1 из 1
02.10.2013, 07:16:50
    #38413789
MadChild
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Ребят, помогите плиз переделать запрос с использованием IN на запрос с использованием JOIN
Требуется это для того что бы я смог использовать LIMIT в JOIN'е
Сам не могу понять как это сделать

Исходный запрос

Код: sql
1.
2.
3.
4.
SELECT sfd.* FROM field_data as sfd
INNER JOIN relations as sr on (pid IN (SELECT id FROM `relations` WHERE `pid` = '54' LIMIT 0 , 6) and oType='entry')
WHERE sr.id = sfd.sid and sfd.enabled=1
ORDER BY sr.position ASC, sfd.fid ASC
...
Рейтинг: 0 / 0
02.10.2013, 08:56:11
    #38413822
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Расставьте ВЕЗДЕ алиасы таблиц.
...
Рейтинг: 0 / 0
02.10.2013, 09:00:06
    #38413825
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Но предположительно это будет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT sfd.* 
FROM field_data as sfd
   , relations as sr
   , ( SELECT r.id 
       FROM relations r
       WHERE r.pid = 54 
       LIMIT 0 , 6
     ) AS sq
WHERE ???.pid = sq.id
  AND ???.oType='entry'
  AND sr.id = sfd.sid 
  AND sfd.enabled=1
ORDER BY sr.position ASC
      , sfd.fid ASC
...
Рейтинг: 0 / 0
02.10.2013, 10:19:17
    #38413903
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
чуть по-другому :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT sr.position, sfd.* 
FROM field_data AS sfd
JOIN (
  (SELECT id FROM relations WHERE pid=54 LIMIT 6) fltr
  JOIN relations AS sr ON sr.pid = fltr.id AND sr.oType='entry'
  ) ON sr.id = sfd.sid
WHERE sfd.enabled=1
ORDER BY sr.position, sfd.fid
...
Рейтинг: 0 / 0
02.10.2013, 10:24:36
    #38413916
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Какая разница? все связывания - внутренние.
...
Рейтинг: 0 / 0
02.10.2013, 10:31:54
    #38413928
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
AkinaКакая разница? все связывания - внутренние.Я думаю, план выполнения будет другим

Могу ошибаться, я ж не оптимизатор MySQL

К тому же к JOIN легко можно добавить LEFT
...
Рейтинг: 0 / 0
02.10.2013, 10:52:45
    #38413957
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Лень моделировать, но с достаточно большой вероятностью план будет одинаков. А если нет - опять-таки с большой вероятностью план моего запроса будет лучше, оптимизатор не так часто ошибается в выборе порядка связывания. Впрочем, на результат выполнения запроса это не повлияет.

А вот заменить внутреннее связывание на левое нельзя - изменится логика запроса.
...
Рейтинг: 0 / 0
02.10.2013, 11:48:52
    #38414043
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Ребят, помогите плиз переделать запрос с использованием IN на запрос с использованием JOIN

Да зачем же ?


Требуется это для того что бы я смог использовать LIMIT в JOIN'е


Добавь LIMIT в подзапросе для IN, в чём проблема ?
...
Рейтинг: 0 / 0
02.10.2013, 11:54:35
    #38414053
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
Код: sql
1.
2.
3.
4.
SELECT sfd.* FROM field_data as sfd
INNER JOIN relations as sr on (pid IN (SELECT id FROM `relations` WHERE `pid` = '54' LIMIT 0 , 6) and oType='entry')
WHERE sr.id = sfd.sid and sfd.enabled=1
ORDER BY sr.position ASC, sfd.fid ASC




Тебе надо было не так сформулировать вопрос.

не "перепишите", а "напишите заново, нужно то-то и то-то".
...
Рейтинг: 0 / 0
02.10.2013, 11:57:06
    #38414059
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
MasterZivв чём проблема ?"проблема" в том, что человек наслушался советов в духе "ин всегда быстрее джойна"
применительно к мусклю это очень часто верно, но не всегда
а если ещё и нужных индексов нет, то "переписывание ин на джойн" скорее всего вообще никак не поможет...
...
Рейтинг: 0 / 0
02.10.2013, 12:01:29
    #38414069
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
tanglirMasterZivв чём проблема ?"проблема" в том, что человек наслушался советов в духе "ин всегда быстрее джойна"
применительно к мусклю это очень часто верно, но не всегда


Применительно к SQL вообще никогда нельзя ничего сказать в дуже "ЭТО-1 всегда быстрее ЭТОГО-2"
...
Рейтинг: 0 / 0
02.10.2013, 12:55:58
    #38414167
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переделать IN на JOIN
MasterZiv,

так ото ж :)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / переделать IN на JOIN / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]