Здравствуйте!
Есть таблица вида:
ID | Category | Field1 | .... | FieldN
В ней ID — первичный-ключ автоинкремент, Category — некая строка, остальные поля содержат некие данные.
Для каждой Category существует >=1 записей, у которых хотя бы поле с данными будет уникальным (в пределах категории). То есть:
ID | Category | Field1 | ... | FieldN
1 | category1 | somedata | ... | somedata
2 | category1 | otherdata | ... | somedata
3 | category1 | somedata | ... | otherdata
4 | category2 | otherdata | ... | somedata
5 | category3 | somedata | ... | somedata
6 | category4 | unique data | ... | unique data
Необходимо: для категории x найти все категории, у которых данные в одинаковом столбце совпадают. То есть, в примере выше, для category4 таких записей не будет, для остальных трёх будут две других.
В грязном виде это будет выглядеть так:
-- получим все возможные варианты полей в первой категории
SELECT `Field1`, ..., `FieldN` FROM `table` WHERE `Category`='category1'
-- найдём все категории, у которых поля совпадают, и которые не являются первой категорией
SELECT `Category` FROM `table`
WHERE ( `Field1` IN ( соответствующий столбец из первого запроса )
OR `FieldN` IN ( ... ) )
AND `Category`!='category1'
Можно ли этот запрос составить лучше?