Выборка уникальных строк в LEFT OUTER JOIN

Рейтинг: 1Ответов: 1Опубликовано: 21.03.2015

Доброе утро!

Имеется SQL запрос:

SELECT `rel`.id AS `id`, CASE
WHEN meta.meta_name = 'free'
THEN 'Свободен'
WHEN meta.meta_name = 'reserved'
THEN 'Резерв'
WHEN meta.meta_name = 'order' AND meta.meta_data>100
THEN 'Куплен'
WHEN meta.meta_name = 'order' AND meta.meta_data<100
THEN 'Свободен'
WHEN meta.meta_name = 'pre-order'
THEN 'Куплен'
ELSE 'На проверке'
END status
FROM `rel` 
LEFT OUTER JOIN `rel_meta` `meta` ON 
    ((`rel`.id = meta.rel_id AND
    (
    meta.meta_name = 'order' OR
    meta.meta_name = 'pre-order' OR
    meta.meta_name = 'free' OR
    meta.meta_name = 'reserved'
    )) OR meta.id = NULL)
    LIMIT 20

Цель выполнения запроса: Получение записей из таблицы rel, колонка id + колонка status. Проблема: при выполнении в meta может храниться 2 записи order и pre-order, которые привязаны к одному rel_id, из-за чего в результате строки удваиваются.

Как решить проблему? Что-то подсказывает, копать в сторону DISTINCT, но не смог понять, где именно он уместен.

Заранее благодарен.

Ответы

▲ 2Принят

DISTINCT подойдет, если для обоих случаев статус "куплен":

SELECT DISTINCT `rel`.id AS `id`, CASE