Есть таблицы:
offers
offer_id item_id is_main
1 1 1
2 1 0
3 1 0
4 2 0
5 2 0
6 3 0
7 3 1
divisions
item_id division_id
1 1
2 1
3 1
Есть запрос:
SELECT offers.offer_id , offers.item_id FROM offers
JOIN divisions ON offers.item_id = divisions.item_id
WHERE divisions.division_id IN (1)
Результат должен быть таким: offer_id (1, 4, 7), т.е. должен возвращаться только один offer_id от каждого item_id. Если существует offer_id с is_main = 1, то - он, если нет - то первый сортировкой по offer_id.
Как это реализовать?
limit 1в конце запроса – Mike Jan 20 '17 at 09:24SELECTприсутствуют столбцы, которые и не в агрегирующей функции, и не вGROUP BY? – Regent Jan 20 '17 at 09:40WHERE, а должен бытьON. В связи с чем вопрос: вы не против, если я размещу ответ на базе вашего решения с переименованиями? – Regent Jan 20 '17 at 09:44coalesce(min(case when is_main=1 then offer_id),min(offer_id))не работает ? при вашем group by конечно – Mike Jan 20 '17 at 09:45MAX(илиMINв данном вопросе) можно просто указать само поле, что уменьшает длину запроса на добрых пару десятков символов). Возможно, стоит и в ответе это сделать. – Regent Jan 20 '17 at 09:51SELECT d.item_id, COALESCE(MIN(CASE WHEN is_main = 1 THEN offer_id END), MIN(offer_id)) AS offer_id FROM divisions AS d LEFT JOIN offers AS o ON o.item_id = d.item_id GROUP BY d.item_id. – Regent Jan 20 '17 at 09:57