SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 12.05.2011 12:05:41

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

LEFT JOIN одной записи

Существует 2 таблицы.

table: groups
group_id  |    name
--------------------
   1        |     text
   2        |     text
   3        |     text
   4        |     text
   5        |     text

table: items
item_id | group_id
------------------
   1      |     1
   2      |     1
   3      |     1
   4      |     2
   5      |     2

Нужно вынуть все записи из groups и к каждой записи присоединить одну запись из items (первую либо любую запись)

В принципе это можно сделать так:

SELECT * FROM groups g
LEFT JOIN (SELECT * FROM items group by group_id) i ON(g.group_id=i.group_id)

Тут запрос "SELECT * FROM items group by group_id" является тяжёлым.

Есть какое то другое решение ?

Неактивен

 

#2 12.05.2011 23:21:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: LEFT JOIN одной записи

А зачем тут вообще подзапрос? Сделайте просто LEFT JOIN items?

Неактивен

 

#3 12.05.2011 23:47:16

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: LEFT JOIN одной записи

paulus написал:

А зачем тут вообще подзапрос? Сделайте просто LEFT JOIN items?

Нет, такой вариант не подходит, так как items содержит много записей связных с groups, а мне нужно только одна запись с каждой группы.

Оптимальный вариант нашёл :

SELECT g.*,
(SELECT item_id FROM items i where g.group_id=i.group_id limit 1) as item_id
FROM groups g


Работает быстро.

Неактивен

 

#4 11.05.2023 22:13:00

DimitriBolt
Участник
Зарегистрирован: 11.05.2023
Сообщений: 1

Re: LEFT JOIN одной записи

evgeny написал:

paulus написал:

А зачем тут вообще подзапрос? Сделайте просто LEFT JOIN items?

Нет, такой вариант не подходит, так как items содержит много записей связных с groups, а мне нужно только одна запись с каждой группы.

Оптимальный вариант нашёл :

SELECT g.*,
(SELECT item_id FROM items i where g.group_id=i.group_id limit 1) as item_id
FROM groups g


Работает быстро.

Спасибо! Очень элегантное решение, не видел такого на разных там StackOverFlow - работает заметно быстрее join'а.

Неактивен

 

#5 15.05.2023 23:30:52

OlegR
Участник
Зарегистрирован: 14.06.2022
Сообщений: 21

Re: LEFT JOIN одной записи

Стандартное решение в таких случаях.
Но, в отличие от join, имеет недостаток - подзапрос должен возвращать только одну колонку.
Если нужно вернуть из связанной таблицы несколько колонок, то или обычный join с группировкой или несколько одинаковых подзапросов для получения каждой колонки.

Неактивен

 

Board footer

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