Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Найти записи с 1 одинаковым полем и 1 разным полем


Автор: Rusman 21.11.2017, 10:33
Здравствуйте!
Подскажите, пожалуйста, мне нужно выбрать записи из базы товаров с одинаковым артикулом, но разным полем раздел:
Пример:
К примеру в базе у нас есть?
001 / Товар 1 / Часы
001 / Товар 2 / Игрушки
002 / Товар 3 / Часы
003 / Товар 4 / Часы
003 / Товар 5 / Сумки

Выбрать по сути нам нужно только
001 / Товар 1 / Часы
001 / Товар 2 / Игрушки
003 / Товар 4 / Часы
003 / Товар 5 / Сумки
 
А если еще можно, то в идеале конечно получить только Часы (отбросив остальные записи):
001 / Товар 1 / Часы
003 / Товар 4 / Часы

Всем заранее большое спасибо! 

Автор: Snowy 21.11.2017, 12:06
Код

select t1.* from mytable t1
join mytable t2 on t2.section_id=t1.section_id and t2.id<>t1.id
group by t1.id
order by t1.id;

Автор: Akina 21.11.2017, 12:40
Цитата(Rusman @  21.11.2017,  11:33 Найти цитируемый пост)
получить только Часы

Код

SELECT *
FROM MyTable
WHERE articul IN (SELECT articul
                  FROM MyTable
                  GROUP BY articul
                  HAVING COUNT(*) > 1
                 )
AND category = 'Часы'

Либо 
Код

select t1.* 
from mytable t1
join mytable t2 on t2.section_id=t1.section_id and t2.id<>t1.id
WHERE t1.category = 'Часы'
-- group by t1.id
order by t1.id;

Автор: Snowy 21.11.2017, 12:59
Я так понимаю, что под "Только часы" он имел ввиду 1-ю запись для каждого дубликата.

Код

select * from mytable t
join (
  select min(id) as id from (
    select t1.id, t1.section_id from mytable t1
    join mytable t2 on t2.section_id=t1.section_id and t2.id>t1.id
  ) z 
  group by section_id
) r on r.id=t.id

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)