powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / переделать IN на JOIN
12 сообщений из 12, страница 1 из 1
переделать IN на JOIN
    #38413789
MadChild
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, помогите плиз переделать запрос с использованием 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
переделать IN на JOIN
    #38413822
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расставьте ВЕЗДЕ алиасы таблиц.
...
Рейтинг: 0 / 0
переделать IN на JOIN
    #38413825
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но предположительно это будет

Код: 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
переделать IN на JOIN
    #38413903
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чуть по-другому :)
Код: 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
переделать IN на JOIN
    #38413916
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая разница? все связывания - внутренние.
...
Рейтинг: 0 / 0
переделать IN на JOIN
    #38413928
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaКакая разница? все связывания - внутренние.Я думаю, план выполнения будет другим

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

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

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

Да зачем же ?


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


Добавь LIMIT в подзапросе для IN, в чём проблема ?
...
Рейтинг: 0 / 0
переделать IN на JOIN
    #38414053
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
переделать IN на JOIN
    #38414059
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivв чём проблема ?"проблема" в том, что человек наслушался советов в духе "ин всегда быстрее джойна"
применительно к мусклю это очень часто верно, но не всегда
а если ещё и нужных индексов нет, то "переписывание ин на джойн" скорее всего вообще никак не поможет...
...
Рейтинг: 0 / 0
переделать IN на JOIN
    #38414069
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirMasterZivв чём проблема ?"проблема" в том, что человек наслушался советов в духе "ин всегда быстрее джойна"
применительно к мусклю это очень часто верно, но не всегда


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

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


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