|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть 2 таблицы (упростил до минимума) products _____ product_id | name 1 | tovar1 2 | tovar2 3 | tovar3 4 | tovar4 5 | tovar5 и product_desc _____ param_id | param | product_id 1 | param1 | 1 2 | param2 | 2 3 | param1 | 4 4 | param4 | 3 5 | param5 | 5 Стандартная выборка с left join выглядит так Код: sql 1.
Далее хотелось бы добавить еще один столбец в выборку с product_id, при условии если есть одинаковый param для разных product_id, добавив к запросу еще один left join, в итоге получается такой запрос Код: sql 1. 2.
Подскажите пожалуйста на сколько верно такое исполнение? Мне кажется можно более эффективнее реализовать, но не знаю как, подскажите люди добрые. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 16:48 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN, По идее, во втором запросе должно быть соединение по полю product_id, а не по param. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 16:51 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Забыл добавить условие AND pd2.product_id != p.product_id ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:03 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Написал fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:05 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN Забыл добавить условие AND pd2.product_id != p.product_id Тогда рассказывайте логику ваших таблиц и запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:08 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZNПодскажите пожалуйста на сколько верно такое исполнение? Мне кажется можно более эффективнее реализовать, но не знаю как, подскажите люди добрые.запрос работает как вам надо, значит все верно. Эффективность здесь искать не надо. (если у вас не этажерка из LEFT JOIN) Не хочется экспериментировать, но что будет если одинаковые параметры у 3-4 продуктов? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:25 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
а что там экпериментировать, есть же фидддл т.е. зачем это fiddle копия рез-таproduct_id name param product_param1 tovar1 param1 42 tovar2 param2 3 tovar3 param4 53 tovar3 param4 44 tovar4 param4 54 tovar4 param4 34 tovar4 param1 15 tovar5 param5 5 tovar5 param4 45 tovar5 param4 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:20 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
miksoft, нужно выбрать смежный товар с общем значением param. По логике больше чем у двух товаров не может быть общее значение param. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:46 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Alex_Ustinov, По логике больше чем у двух товаров не может быть общее значение param. На 25 000 товаров запрос выполняется 1.25 сек. Думаю это из-за нескольких left join... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:50 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Alex_Ustinov, param_id это уникальный ключ таблицы, забыл сказать, простите. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:51 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN По логике больше чем у двух товаров не может быть общее значение param. И тогда на вопрос Vladimir_KZN на сколько верно такое исполнение? Vladimir_KZN На 25 000 товаров запрос выполняется 1.25 сек. 1) Показывайте РЕАЛЬНЫЕ DDL таблиц 2) Показывайте РЕАЛЬНЫЙ текст запроса 3) Показывайте статистику таблиц 4) Показывайте EXPLAIN запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 09:06 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN Alex_Ustinov, param_id это уникальный ключ таблицы, забыл сказать, простите. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:10 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Alex_Ustinov, в принципе да, есть ли у вас варианты как можно по другому решить задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:39 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN, если не ошибаюсь - второй LEFT JOIN можно заменить на INNER JOIN я так понял, что основной запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:04 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Alex_Ustinov, Отлично, только ваш запрос выводит запись если есть смежный товар. А как вывести все записи, только если есть смежный товар, то выводить в соответствующий столбец, если нет, то выводить null ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 16:54 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN, да все то же самое как и было. products Left Join ... задача то какая? зеркальные пары обязательно нужны? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:28 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Alex_Ustinov, нет, зеркальные пары не обязательны. Задача без left join запрос составить или же оптимизировать запрос с left join, чтобы результат вывода был таков fiddle Попробовал избавиться от зеркальных пар с помощью group by, но не вышло ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 08:01 |
|
Запрос с несколькими Left Join к одной таблице
|
|||
---|---|---|---|
#18+
Vladimir_KZN, если нужны "все" записи, то это только Left Join если нужно избавиться от зеркальных пар, то запрос непонятен по оптимизации - смотрите план запроса и какие индексы используются ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 10:12 |
|
|
start [/forum/topic.php?fid=47&fpage=21&tid=1828565]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 154ms |
0 / 0 |