У меня есть таблица Animal со структурой, приведенной нижеЛучший способ избежать присоединения в той же таблице несколько раз
AnimalId Feature Present
-------- ------- -------
1 Teeth Yes
1 Leg Yes
2 Teeth No
2 Leg Yes
3 Teeth Yes
3 Leg Yes
мне нужно, чтобы получить AnimalID, если оба зуба и Lege являются «Да» я написал запрос как
select distinct A1.AnimalId from Animal A1
inner join Animal A2 on
A1.AnimalId =
(select distinct A2.AnimalId from Animal A2
inner join Animal A3 on
A2.AnimalId =
(select distinct A3.AnimalId from Animal A3 where A3.Feature = 'Leg' and A3.Present = 'Yes' group by A3.AnimalId)
where A2.Feature = 'Teeth' and A2.Present = 'Yes' group by A2.AnimalId)
и его работы.
хотел бы знать, есть ли лучший способ написать это и добиться того же результата.
Почему вы присоединиться вообще? Просто запросите таблицу и используйте предложение «где» ... –
Остерегайтесь страшного EAV ([Модель значения атрибута объекта] (https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80 % 93value_model)); он обычно делает запрос сложным, как вы только что узнали. –