SQL - выбор первой подходящей записи для объединения

0

Используя MySQL, у меня есть набор таблиц с 1- > N отношениями из элементов → items → photos.

Я пытаюсь выбрать список элементов-членов + несколько столбцов из первой связанной фотографии (сначала я имею в виду фотографию с наименьшим порядком сортировки).

В настоящее время у меня есть этот запрос, который работает, но кажется слишком сложным. Есть ли более простой способ и/или как можно улучшить этот запрос. В частности, меня беспокоит внутренний оператор select - будет ли MySQL оптимизировать это только для работы с фотографиями для этого участника, и я должен использовать дополнительные там предложения, чтобы помочь его оптимизировать.

SELECT items.member_id, items.item_id, items.title, p.photo_id, p.blob_id, p.image_width, p.image_height
FROM items
LEFT JOIN
(
    SELECT photos.item_id, photos.photo_id, photos.blob_id, photos.image_width, photos.image_height
    FROM 
    (
        SELECT item_id, min(sort_order) as min_sort_order
        FROM photos
        GROUP BY item_id
    ) AS x 
    INNER JOIN photos on photos.item_id=x.item_id and photos.sort_order=x.min_sort_order
) AS p ON items.item_id = p.item_id
WHERE items.member_id=1
ORDER BY items.title;
Теги:

1 ответ

0
Лучший ответ
SELECT 
        items.member_id, items.item_id, items.title, photo.photo_id, photo.blob_id, photo.image_width, photo.image_height
FROM 
        items
JOIN photos on items.item_id = photos.item_id
JOIN (SELECT item_id, min(sort_order) as min_sort_order
        FROM photos
        GROUP BY item_id) min_photo on photos.item_id=min_photo.item_id and photos.sort_order=min_photo.min_sort_order
WHERE items.member_id=1
ORDER BY items.title;
  • 0
    Почти. Я забыл упомянуть, что предметы не должны иметь фотографию. Этот запрос не возвращает эти элементы.
  • 0
    В этом случае ваш запрос выглядит нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню