Как вывести строки из разных таблиц, у которых одно и то же значение в полях "название" и "признак", но разные значения в поле "номер"?
Допустим, есть 2 таблицы (см. ниже). Как вывести строки, у которых одно и то же значение в полях "название" и "признак", но разные значения в поле "номер"? таблицы связать через "from Цветономера join Названия on Цветономера.id = Названия.цветономер" То есть нужно вывести строки, у которых совпадают "название" и "признак", при этом если номера у них одинаковые, то выводить их не нужно. Но если есть строки с неуникальными номерами и получается одинаковыми полями "название" и "признак" , то вывести эту уникальную строку с отличным номером и сгруппированную строку, где все поля одинаковые: |122|black|1| |123|black|5| |128|red|4| |129|red|7|
таблица "Цветономера"
| id | признак | номер |
|---|---|---|
| 121 | black | 1 |
| 122 | black | 1 |
| 123 | black | 5 |
| 124 | black | 1 |
| 125 | blue | 8 |
| 126 | blue | 8 |
| 127 | red | 4 |
| 128 | red | 4 |
| 129 | red | 7 |
таблица "Названия"
| название | цветономер |
|---|---|
| name | 121 |
| name | 122 |
| name | 123 |
| name | 124 |
| name | 125 |
| name | 126 |
| name4 | 127 |
| name4 | 128 |
| name4 | 129 |
Запрос ниже, который был ранее в комментариях к вопросу со значениями из одной таблицы , возможно, корректный. Только как быть со значениями из разных таблиц?
select distinct c."название", c."признак", c."номер" from (
select
"название",
"признак",
"номер",
count(*) over (partition by "название", "признак") cnt
from test
) c
where c.cnt > 1
order by "название", "признак"
Ответы (1 шт):
В общем ответ такой:
select distinct c.название , c.признак, c.номер from (
select НЗ.название , ЦН.признак, ЦН.номер,
count(*) over (partition by НЗ.название , ЦН.признак, ЦН.номер) cnt
from Цветономера as ЦН
join Названия as НЗ on ЦН.ID = НЗ.цветономера ) c
where c.cnt > 1
order by c.название , c.признак