Перечислите строки, содержащие часть одинаковых данных. Часть не всегда одинакова - PullRequest
0 голосов
/ 23 октября 2019

У меня есть список, подобный этому в таблице, называемой устройствами:

devicename   icon_color
Device1      icon_red
Device1 (1)  icon_green
sfsdfsd      icon_green
aaaaaaa (1)  icon_red
bbbbbbb      icon_green
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

Мне нужно вывести:

A- список всех устройств, для которых схоже имя устройства (просто для контроля). В этом списке это будет:

devicename   icon_color
Device1      icon_red
Device1 (1)  icon_green
bbbbbbb      icon_green
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

B- Результат A-, но отфильтрованный по icon_color='icon_red' (это действительно то, что мне нужно здесь). В этом списке это будет:

devicename   icon_color
Device1      icon_red
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

Я пробовал много вещей без успеха. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

для вашего первого требования, используя having условие

select * from devices where exists 
    (select devicename from devices
    group by devicename 
    having count(1) > 1)

для вашего второго требования, просто добавьте where предложение

select * from devices where exists 
    (select devicename from devices
    group by devicename 
    having count(1) > 1)
where icon_color = 'icon_red'
0 голосов
/ 23 октября 2019

Хммм. ,,Казалось бы, это делает то, что вы хотите:

select d.*
from devices d
where d.icon_color = 'icon_red' and
      ( (d.device_name not like '% %' and
         exists (select 1
                 from devices d2
                 where d2.device_name like d.device_name + ' %'
                )
        ) or
        (d.device_name like '% %' and
         exists (select 1
                 from devices d2
                 where d.device_name like d2.device_name + ' %'
                )
        )
       );

Это ищет похожее имя устройства с пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...